首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用python请求发送表单数据?

如何使用python请求发送表单数据?
EN

Stack Overflow用户
提问于 2019-06-24 05:20:50
回答 1查看 10.3K关注 0票数 3

我正在尝试使用python3和请求库发送POST请求。当我使用Postman时,我得到了我期望的结果,所以我复制了postman生成的代码,这样它就可以工作了。

这是邮递员代码生成的代码:

代码语言:javascript
复制
import requests

payload = "name=\"claveElector\"\r\n\r\nABCDEF01234567H400\r\nname=\"numeroEmision\"\r\n\r\n01\r\nname=\"ocr\"\r\n\r\n4158093946570\r\nname=\"g-recaptcha-response\"\r\n\r\nsome-captcha\r\nname=\"modelo\"\r\n\r\na"

url = "https://listanominal.ine.mx/scpln/resultado.html"

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"claveElector\"\r\n\r\nTPRSJC95010209H400\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"numeroEmision\"\r\n\r\n01\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"ocr\"\r\n\r\n4158093946570\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"g-recaptcha-response\"\r\n\r\nsome-re-captcha\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"modelo\"\r\n\r\na\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

更清楚地说,为什么不工作的部分是存在于两个结果中的差异。

With the postman code i got this

该代码是使用以下数据生成的:

所以我试着用我自己的代码做同样的事情,我试着在文件部分和数据部分发送数据,但都不起作用。在阅读其他StackOverflow问题时,他们建议使用请求工具带库中的MultipartEncoder。

所以我的实现是这样的:

代码语言:javascript
复制
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

clave_elector = "ABCDEF01234567H400"
numero_emision = "01"
ocr = "1234567846570"
modelo = "a"

params = {
    "claveElector": clave_elector,
    "numeroEmision": numero_emision,
    "ocr": ocr,
    "modelo": modelo,
    "g-recaptcha-response": ''
}

data = MultipartEncoder(fields = params)

headers = {
    'Content-type': data.content_type
}
response = requests.post(
    'https://listanominal.ine.mx/scpln/resultado.html',
    data = data,
    headers = headers
)
print(response.text)

With the custom code I got the following

如果您尝试这两个代码,您可以看到结果是如何不同的。我对第一个很感兴趣,它是通过Postman生成的代码得到的。

我不知道为什么我的代码不能工作,我做错了什么?我想说的是,不知何故,在我的代码中,请求没有正确发送,因此网站无法读取它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-24 08:50:11

经过这么多的尝试和错误,我发现实现这一点的唯一方法是使用以下代码:

代码语言:javascript
复制
from requests import Request, Session

clave_elector = "TPRSJC95010209H400"
numero_emision = "01"
ocr = "4158093946570"
modelo = "a"

data = {
    "claveElector": clave_elector,
    "numeroEmision": numero_emision,
    "ocr": ocr,
    "modelo": modelo,
    "g-recaptcha-response": 'hjkkjgh'
}

request = Request(
    'POST', 
    'https://listanominal.ine.mx/scpln/resultado.html',
    files = {
        'claveElector': (None, data['claveElector']),
        'numeroEmision': (None, data['numeroEmision']),
        'ocr': (None, data['ocr']),
        'modelo': (None, data['modelo']),
        'g-recaptcha-response': (None, 'xxx'),
    }
).prepare()


s = Session()
response = s.send(request)

print(response.text)

我真的不知道为什么这与我想要做的不同,但它是有效的。如果有人能评论一下为什么这样做,我将不胜感激。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56727817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档