当前位置: 首页 > 面试题库 >

Python-使用Python 3 urllib发出POST请求

谢洛城
2023-03-14
问题内容

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

为了模拟单击“搜索”按钮而不填写任何表单,该表单会将数据添加到页面。通过在chrome开发人员工具中查看“网络”标签时点击按钮,我获得了POST标头信息。我之所以发布此信息,而不是仅仅从其他类似问题中复制解决方案,是因为我认为我可能没有获得正确的标题信息。格式是否正确,我是否掌握了正确的信息?我以前从未提出过POST请求。

这是我设法拼凑而成的:

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请求中检索的任何数据。


问题答案:

这就是你的做法。

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)


 类似资料:
  • 我阅读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供了一个用于写入内容的输入流,而不知道(或关心)该内容是什么格式。 现在我想用name和password参数对URL做一个普通的post。 这意味着我需要自己将名称和值对编码成流?

  • 问题内容: 我正在尝试发出POST请求以检索有关一本书的信息。这是返回HTTP代码的代码:302,已移动 当我从浏览器尝试时,可以从以下页面进行操作:http : //www.bkstr.com/webapp/wcs/stores/servlet/BuybackMaterialsView?langId=-1&catalogId=10001&storeId=10051&schoolStoreId=1

  • 问题内容: 如果尝试登录https://orbit.theplanet.com/Login.aspx?url=/Default.aspx(使用任何用户名/密码组合),则可以看到登录凭据以非传统集的形式发送POST数据:仅一个寂寞的JSON字符串,没有正常的key = value对。 具体来说,代替: 甚至类似: 简单来说就是: 是否可以使用或替代模块执行此类请求?我愿意这样做,但希望有更高层次的东

  • 我正在尝试使用ajax发送post请求,但始终出现以下错误: XMLHttpRequest无法加载http://192.168.1.123:8080。对预检请求的响应无法通过权限改造检查:请求的资源上不存在“访问控制允许源”标头。因此不允许访问源“http://localhost:8080”。 这是我的代码

  • 问题内容: 我只能从文档中运行hello world示例(GithubService)。 问题是当我运行我的代码时,出现以下错误, 使用JsonReader.setLenient(true)在第1行第1列路径$接受格式错误的JSON 我的API采用POST参数值,因此无需将其编码为JSON,但是它确实以JSON返回响应。 对于响应,我获得了使用工具生成的ApiResponse类。 我的界面: 这是

  • 问题内容: 我想向API发送POST请求,以将我的数据作为内容类型发送。由于我需要管理请求标头,因此我正在使用该方法来创建请求。对于此POST请求,我将数据查询附加到URL上,并将正文保留为空,如下所示: 当我回应时,我总是得到。我相信问题取决于我的请求,API无法理解我要发布的有效负载。我知道类似的方法,但不确定在这种情况下如何使用它。也许我缺少一些其他的Header,也许有更好的方法使用参数将