当前位置: 首页 > 知识库问答 >
问题:

在Python中使用urllib vs请求的HTTP Post

南宫俊喆
2023-03-14

我正在尝试使用web api,它需要在python3中使用HTTP中的Post字段(web是https)。6.2. 我已经试过了。要求但答复是

urllib。错误HTTPError:HTTP错误403:禁止

下面是我使用的代码:

from urllib.parse import urlencode
from urllib.request import Request, urlopen
from hashlib import sha256
import time

key = 'xxxxxxxxxx'
secret_key = 'yyyyyyyyyyyy'
nonce = int(time.time())

signature = sha256((key + str(nonce) + secret_key).encode()).hexdigest()

url = "https://xxxxx/api/"
post_fields = {'key': key, 'nonce': nonce,
                'signature': signature}

request = Request(url, data=urlencode(post_fields).encode())
response = urlopen(request).read().decode()

但是,我使用以下代码尝试了请求库:

import requests
from hashlib import sha256
import time

key = 'xxxxxxxxxx'
secret_key = 'yyyyyyyyyyyy'
nonce = int(time.time())

signature = sha256((key + str(nonce) + secret_key).encode()).hexdigest()

url = "https://xxxxx/api/"
post_fields = {'key': key, 'nonce': nonce,
                        'signature': signature}
response = requests.post(url, post_fields)

它起作用了。我真的很想知道不同的,因为urllib.request可以在指定数据参数时发送帖子请求。

共有1个答案

秋阳荣
2023-03-14

这两段代码都发送了正确的POST请求。它们之间的唯一区别将是发送的标题。除了完全相同的头之外,urllib。请求将发送:

Accept-Encoding: identity
User-Agent: Python-urllib/3.6

请求将发送:

Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: python-requests/2.18.1

您必须尝试添加和更改标题到您的urllib.request代码中,看看这些是否重要。

您可以始终使用http://httpbin.org/post作为URL,查看您发布的信息;该服务将接收到的内容作为JSON对象回显。看见http://httpbin.org了解更多信息。

 类似资料:
  • 问题内容: 我正在尝试使用带有Python请求的文件(使用Chrome扩展程序生成)访问经过身份验证的网站: 它不会引发任何错误或异常,但是会错误地显示登录屏幕。但是,我知道我的cookie文件是有效的,因为我可以通过使用它成功地检索我的内容。知道我在做什么错吗? 编辑: 我跟踪,并且可以验证cookie被正确解析(即他们的正确的价值观,,等标记)。但是由于事务仍在生成登录表单,因此似乎必须做其他

  • 问题内容: 是否可以使用Python的库发送SOAP请求? 问题答案: 确实有可能。 这是一个使用普通请求lib调用Weather SOAP Service的示例: 一些注意事项: 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。可能是更 正确 使用的标头(但weatherservice更喜欢 这将以xml字符串形式返回响应-然后,您需要解析该xml。 为简单起见,我以纯文本形式包含了该

  • 问题内容: 请求是一个非常不错的库。我想用它来下载大文件。问题是不可能将整个文件保留在内存中,我需要分块读取它。这是以下代码的问题 由于某种原因,它无法按这种方式工作。仍将响应加载到内存中,然后再将其保存到文件中。 更新 如果你需要一个小型客户端,可以从FTP下载大文件,则可以在此处找到它。它支持多线程和重新连接(它确实监视连接),还可以为下载任务调整套接字参数。 问题答案: 使用以下流代码,无论

  • 我试图使用cURL获取一个HTTP请求响应,这很好。然而,当我在Python中使用“请求”包时,我没有得到任何响应(它只是超时,没有错误或返回响应)。 我的cURL代码如下: 当我在cURL代码中使用-v时,我得到以下消息: 试图144.126.138.12... TCP_NODELAY集 连接到144.126.138.12(144.126.138.12)端口17001(#0) POST/api/

  • 问题内容: 我想使用Tor向网页发出多个GET请求。我想为每个请求使用不同的ipaddress。 使用此,我提出了一个请求。如何更改ipaddress来做另一个? 问题答案: 这是您要使用的代码(使用来下载词干包) 祝你好运,希望能成功。