1

我想将一个简单的字符串从 Python 3 发送到一个 PHP 站点,该站点将其转换为 .txt 文件。我的整个代码如下所示:

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:

<?php

$handle = fopen("/dir/".name.".txt", "w");

$myContent = $_POST[aa];

fwrite($handle, $myContent);

fclose($handle);

?>

Python 访问该站点,并创建一个 .txt 文件,但该文件为空白。我尝试更改$_POST$_GETand $_REQUEST,以及'aa'在各个地方放置单引号和双引号。我怀疑Python并且PHP没有传达我希望它解释的字符串/数据的名称。

编辑:此 PHP 代码已经处理来自另一个网站的 POST 数据。该问题仅与 Python 兼容性有关

4

3 回答 3

2

您的数据需要像这样的哈希:

a = {}
a["name"] = "ben";

那么你需要调用 urllib.urlencode 就可以了

a = urllib.urlencode(a)

然后像这样调用 urlopen:

urllib.request.urlopen(req, a)
于 2012-09-30T23:14:16.540 回答
1

您可以使用 usefile_put_contents并且$_POST[aa]应该是无效的$_POST['aa']

$file = "/dir/".name.".txt" ;
file_put_contents($file, $_POST['aa']);

我认为你应该看看httplib2

from httplib2 import Http
from urllib import urlencode
h = Http()
str1 = body = {'aa': 'abcdefg'}
resp, content = h.request("http://site.net/post.php", "POST", urlencode(data))
于 2012-09-30T23:15:21.903 回答
1

您发送的数据无效。按照文档

data应该是标准 application/x-www-form-urlencoded 格式的缓冲区。urllib.parse.urlencode() 函数采用 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'))
于 2012-10-01T00:25:04.063 回答