gpt4 book ai didi

Python2 与 Python3 post 请求

转载 作者:行者123 更新时间:2023-12-01 02:12:49 27 4
gpt4 key购买 nike

我已经查看了似乎所有其他 python3 urllib 帖子,但似乎没有任何效果。

我有一个 Django(v1.11.1,使用 Python2)应用程序,该应用程序应该接受 POST 请求(例如,向其发送一些 JSON 数据);它在 python2 中使用 urllib/urllib2 工作,但在 python3 (和 urllib)中我无法让它发送 Django 理解的请求。寻求一些帮助来解决这个问题。

我的Django View 函数:

def update_db(request):print dir(request)
print request.POST
return HttpResponse('Thanks for visiting.')

这是 Python2 中的工作请求:

import urllib
import urllib2
import json

d={'foo': 1, 'bar': 2}
data = urllib.urlencode(d)
req = urllib2.Request(url, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req, data=data) # works!

查看我的 Django 应用程序中的日志,我发现它理解了该请求:

<QueryDict: {u'foo': [u'1'], u'bar': [u'2']}>

现在,对于 Python3,这是我的请求方法:

import urllib.parse
import urllib.request
import json

d={'foo': 1, 'bar': 2}
data = json.dumps(d).encode('utf8')
req = urllib.request.Request(url,
data=data,
headers={'Content-type': 'application/json'})
f = urllib.request.urlopen(req)

我的 Django 日志显示:

<QueryDict: {}>

Django 还报告 request.method 确实是 POST,但无论出于何种原因,它无法理解我作为 post 请求的一部分发送的实际 JSON。我还尝试了 requests 库,正如其他线程中所建议的那样,但似乎没有任何效果——我的 POST 内容总是空白。最后,我还在编码方法中尝试了 ascii (而不是显示的 utf8)。

有什么建议吗?有没有办法可以检查 urllib 实际上对 url 发出的传出请求?谢谢!

编辑:

正如下面的评论中提到的,我不理解我发送的实际内容。我的 Python3 工作版本现在为:

import urllib.parse
import urllib.request

d={'foo': 1, 'bar': 2}
data = urllib.parse.urlencode(d).encode('utf8')
req = urllib.request.Request(url, data=data)
f = urllib.request.urlopen(req)

我最终可能会升级到 requests 库,但至少现在可以了。

最佳答案

你的第一个片段令人困惑。您声称要发送 JSON,但实际上没有;您正在发送标准表单编码数据。无论如何,这就是 Django 默认理解的内容。

不过,似乎没有任何理由不在 Python 3 中执行相同的操作。为什么要序列化为 JSON?只要这样做:

data = urllib.parse.urlencode(d)

并且在这两种情况下都删除 header ,因为您没有发送 JSON。

最后,只需使用请求

关于Python2 与 Python3 post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48602625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com