【问题标题】:Python - Form is filled but not sentPython - 表格已填写但未发送
【发布时间】:2014-02-14 08:43:07
【问题描述】:

我一直在尝试使用requestsurllib(分别)提交表单,但没有多大成功。 打印响应显示相关字段实际已填写,但未发送表单。 这是我使用的python代码(form_data和url当然改变了)

import urllib
import urllib.request
import urllib.parse
import requests
form_data = {'username':'amiti9124@gmail.com',
             'pass':'123456',
             'passC':'123456',
             'Fname':'amitiamiti',
             'Tkav':'039111111',
             'Cname':'abc',
             'Creditme':'2',
             'numberOfFaxes':10,
             'faxNumber1':'039555555'}
url = "www.someurl.com"
req = requests.post(url,form_data)
print(req.content.decode('UTF-8'))

编辑:还添加了部分输出

<form action="" method="POST"> 

<div id="menues">פרטי מנוי</div>

<div id="titles"><font color="red" >*</font> כתובת מייל :
    <br />
    <input id="inputs" type="text" class="" dir="ltr" style="text-align:left; direction: ltr;" name="username" value='amiti9124@gmail.com'  />
</div>


<div id="titles"><font color="red" >*</font>סיסמה :
    <br />
    <input id="inputs" type="password" class="" name="pass"  dir="ltr" style="text-align:left; direction: ltr;"  value=123456 />
</div>


<div id="titles"><font color="red" >*</font>אימות סיסמה :
    <br />
    <input id="inputs" type="password" name="passC" class=""  dir="ltr" style="text-align:left; direction: ltr;"  value=123456 />
</div>

<div id="titles"><font color="red" >*</font>שם מלא :
    <br />
    <input id="inputs" type="text" name="Fname" class="" value='amiti amiti' />
</div>

<div id="titles"><font color="red" >*</font>טלפון :
    <br />
    <input id="inputs" type="text" name="Tkav" class="" dir="ltr" value='039111111' />
</div>

<div id="titles">שם חברה (לחשבונית) :
<br />
<input id="inputs" type="text" name="Cname" value='abc' />
</div>

<div id="titles" class="paidOrTrial">
<input type="radio" id="Creditme" name="Creditme"  value="1" style="width: 20px; height: 20px; vertical-align: middle;" />
המשך לתשלום בכרטיס אשראי.
<br />
<input type="radio" id="trialAccount" name="Creditme" checked="checked" value="2" style="width: 20px; height: 20px; vertical-align: middle;"/>
בקשת יתרת התנסות/חשבון נסיון
</div>

<div id="titles" style="display: none; padding: 5px 0 5px 0;">כמות פקסים צפויה לחודש:
    <input type="number" id="numberOfFaxes" name="numberOfFaxes" min="0" max="300" step="10" style="width: 40px;" value='10' dir="ltr"/>
    <div id="err_msg_number" style="display: none; color: red;"></div>
</div>
<div id="numberOfFaxesWrapper" style="display: none;">

    <div id="titles" style="padding: 10px 0px;">חשבון ההתנסות יאפשר שליחת פקסים ל 3 המספרים הבאים :</div>

    <div id="titles">מספר פקס 1 :
        <br />
        <input id="inputs" class="" type="text" name="faxNumber1" dir="ltr" value='039555555' />
    </div>

    <div id="titles">מספר פקס 2 :
        <br />
        <input id="inputs" class="" type="text" name="faxNumber2" dir="ltr"  />
    </div>

    <div id="titles">מספר פקס 3 :
        <br />
        <input id="inputs" class="" type="text" name="faxNumber3" dir="ltr"  />
    </div>
</div>



<input type="submit" name="Button2222" value="הרשם" style="margin: 6px 0pt; padding: 0px 5px; font-size: 130%; font-weight: bold; color: rgb(0, 0, 0);">
</form>

如果有人能指出解决方案,我将不胜感激。 提前感谢!

【问题讨论】:

  • 请贴出程序的错误/异常/输出。
  • form_data 是字典吗?请发布 if 的示例。
  • @SunnyNanda 我已经添加了输出的相关部分
  • @HAL ,form_data 也没有添加。

标签: python forms post urllib python-requests


【解决方案1】:

尝试使用

req = requests.post(url, data=form_data)

如果没有关键字,您几乎不知道您的数据参数与哪个参数相关联,但它可能不是data

【讨论】:

  • 它被定义为requests.post(url, data=None, **kwargs) 即,您不需要将form_data 作为关键字参数传递,requests.post(url, form_data) 会做正确的事情。
  • 你比我更了解界面。关键字很少受到伤害。
【解决方案2】:

requests.post(url,form_data) 确实发送数据。发送的http请求为:

POST /path?query HTTP/1.1
Host: example.com
Content-Length: 146
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: python-requests/x.x.x CPython/y.y.y Linux/z.z.z

username=amiti9124%40gmail.com&Cname=abc&Creditme=2&Fname=amitiamiti&pass=123456&numberOfFaxes=10&faxNumber1=039555555&Tkav=039111111&passC=123456

您可以在浏览器中手动发送表单并比较请求。

您看到的 html 是来自服务器的响应,它收到了您的 post 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多