Can';t让Python3将POST数据传输到PHP
我想将一个简单的字符串从Python3发送到一个PHP站点,该站点将其转换为.txt文件。我的整个代码如下所示:Can';t让Python3将POST数据传输到PHP,php,python,http,post,urllib,Php,Python,Http,Post,Urllib,我想将一个简单的字符串从Python3发送到一个PHP站点,该站点将其转换为.txt文件。我的整个代码如下所示: urllib.request.urlopen(req, a) Python: import urllib.parse import urllib.request str1 = "abcdefg" url = "http://site.net/post.php" aa = str1.encode('utf-8') req = urllib.request.Request(url
urllib.request.urlopen(req, a)
Python:
import urllib.parse
import urllib.request
str1 = "abcdefg"
url = "http://site.net/post.php"
aa = str1.encode('utf-8')
req = urllib.request.Request(url, aa)
req.add_header('Content-Type', 'this/that')
urllib.request.urlopen(req, data=aa)
PHP:
Python访问该站点,并创建一个.txt文件,但该文件为空。我已经尝试将$\u POST
更改为$\u GET
和$\u REQUEST
,并在不同的位置将'aa'
前后加上单引号和双引号。我怀疑Python
和PHP
没有就我希望它解释的字符串/数据的名称进行通信
编辑:此PHP代码已经处理来自其他网站的帖子数据。这个问题只会在Python兼容性方面出现
您的数据需要是如下所示的散列:
a = {}
a["name"] = "ben";
然后您需要对其调用urllib.urlencode
a = urllib.urlencode(a)
然后像这样调用urlopen:
urllib.request.urlopen(req, a)
您的数据需要是如下所示的散列:
a = {}
a["name"] = "ben";
然后您需要对其调用urllib.urlencode
a = urllib.urlencode(a)
然后像这样调用urlopen:
urllib.request.urlopen(req, a)
您可以使用
文件内容并且$\u POST[aa]
无效,它应该是$\u POST['aa']
$file = "/dir/".name.".txt" ;
file_put_contents($file, $_POST['aa']);
我想你应该看看
您可以使用文件内容并且$\u POST[aa]
无效,它应该是$\u POST['aa']
$file = "/dir/".name.".txt" ;
file_put_contents($file, $_POST['aa']);
我想你应该看看
您发送的数据无效。以下:
数据应为标准应用程序/x-www-form-urlencoded格式的缓冲区。函数的作用是:获取一个2元组的映射或序列,并以这种格式返回一个字符串在用作数据参数之前,应将其编码为字节
本文档还包含一个您只需遵循的步骤:
import urllib.request
import urllib.parse
data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
data = data.encode('utf-8')
request = urllib.request.Request("http://requestb.in/xrbl82xr")
# adding charset parameter to the Content-Type header.
request.add_header("Content-Type","application/x-www-form-urlencoded;charset=utf-8")
f = urllib.request.urlopen(request, data)
print(f.read().decode('utf-8'))
您发送的数据无效。以下:
数据应为标准应用程序/x-www-form-urlencoded格式的缓冲区。函数的作用是:获取一个2元组的映射或序列,并以这种格式返回一个字符串在用作数据参数之前,应将其编码为字节
本文档还包含一个您只需遵循的步骤:
import urllib.request
import urllib.parse
data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
data = data.encode('utf-8')
request = urllib.request.Request("http://requestb.in/xrbl82xr")
# adding charset parameter to the Content-Type header.
request.add_header("Content-Type","application/x-www-form-urlencoded;charset=utf-8")
f = urllib.request.urlopen(request, data)
print(f.read().decode('utf-8'))
我应该提到,这个PHP代码已经处理了来自另一个网站的POST数据。这个问题只出现在Python兼容性上。我应该提到,这个PHP代码已经处理了来自另一个网站的POST数据。这个问题只会在Python兼容性方面出现。编写“POST”会让它认为我将其作为我的数据发送,它会出错。另外,您是说要使用urllib.**parse**.urlencode吗?这似乎编码不正确,因为我收到一个关于需要字节而不是字符串的类型错误。请参阅更新的代码忘记告诉您我使用的是httplib2
请参阅一些详细示例编写“POST”使它认为我将其作为我的数据发送,并且它会出错。另外,您是说要使用urllib.**parse**.urlencode吗?这似乎编码不正确,因为我收到一个关于需要字节而不是字符串的TypeError。请参阅更新的代码忘记告诉您我使用的是httplib2
请参阅一些仍然收到TypeError消息的详细示例。urlencode似乎无法将数据转换为utf8字节。到目前为止,我上面的代码:aa=str1.encode('utf-8')是唯一将其转换为适当格式的代码,PHP似乎忽略了它(但没有错误)。@tqastro:不,它不是适当的格式,因为您得到的字节序列不包含“=”,因此它不能是有效的POST数据。仍然会收到TypeError消息。urlencode似乎无法将数据转换为utf8字节。到目前为止,我上面的代码:aa=str1.encode('utf-8')是唯一将其转换为适当格式的代码,PHP似乎忽略了它(但没有错误)。@tqastro:不,它不是适当的格式,因为您得到的字节序列不包含“=”,因此它不能是有效的POST数据。我不知道我的数据需要输入{:}form.I还认为它对于data.encode和.urlencode是多余的,但是在我之后对dict对象执行后者时,我会在data.encode时工作。只执行data.encode不会注册,因为它只是一个str对象,但是没有错误,因为数据是utf8格式的。此外,我忽略了头,因为我认为这不是必需的y、 如果我想,我可以修改多少?我不知道我的数据需要在{:}form.I还认为它对于data.encode和.urlencode是多余的,但是在我之后对dict对象执行后者时,我会在data.encode时工作。只执行data.encode不会注册,因为它只是一个str对象,但是没有错误,因为数据是utf8格式的。此外,我忽略了头,因为我认为这不是必需的y、 如果我想的话,我能改多少?