Python - 使用 Python 3 urllib 发出 POST 请求 [英] Python - make a POST request using Python 3 urllib

查看:44
本文介绍了Python - 使用 Python 3 urllib 发出 POST 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试向以下页面发出 POST 请求:http://search.cpsa.ca/PhysicianSearch

I am trying to make a POST request to the following page: http://search.cpsa.ca/PhysicianSearch

为了模拟点击搜索"按钮而不填写任何表单,从而向页面添加数据.我通过在 Chrome 开发者工具中查看网络选项卡时单击按钮获得了 POST 标头信息.我发布这个而不是仅仅从其他类似问题中复制解决方案的原因是我相信我可能没有得到正确的标题信息.

In order to simulate clicking the 'Search' button without filling out any of the form, which adds data to the page. I got the POST header information by clicking on the button while looking at the network tab in Chrome Developer Tools. The reason I'm posting this instead of just copying solutions from the other similar problems is that I believe I may have not gotten the correct header information.

它的格式是否正确,我是否获取了正确的信息?我以前从未发出过 POST 请求.

Is it properly formatted and did I grab the right information? I've never made a POST request before.

这是我设法拼凑起来的:

This is what I've managed to piece together:

import urllib.parse
import urllib.request


data = urllib.parse.urlencode({'Host': 'search.cpsa.ca', 'Connection': 'keep-alive', 'Content-Length': 23796,
                                     'Origin': 'http://search.cpsa.ca', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                                     'Cahce-Control': 'no-cache', 'X-Requested-With': 'XMLHttpRequest',
                                     'X-MicrosoftAjax': 'Delta=true', 'Accept': '*/*',
                                     'Referer': 'http://search.cpsa.ca/PhysicianSearch',
                                     'Accept-Encoding': 'gzip, deflate',
                                     'Accept-Language': 'en-GB,en-US;q=0.8,en;q=0.6',
                                     'Cookie': 'ASP.NET_SessionId=kcwsgio3dchqjmyjtwue402c; _ga=GA1.2.412607756.1459536682; _gat=1'})


url = "http://www.musi-cal.com/cgi-bin/query?%s"

data = data.encode('ascii')
with urllib.request.urlopen("http://search.cpsa.ca/PhysicianSearch", data) as f:
    print(f.read().decode('utf-8'))

此解决方案输出页面的 HTML,但不包含我想从 POST 请求中检索的任何数据.

This solution outputs the page's HTML, but not with any of the data I wanted to retrieve from the POST request.

推荐答案

这就是你的方法.

from urllib import request, parse
data = parse.urlencode(<your data dict>).encode()
req =  request.Request(<your url>, data=data) # this will make the method "POST"
resp = request.urlopen(req)

这篇关于Python - 使用 Python 3 urllib 发出 POST 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆