如何在PHP中提取通过Python发送的gzip POST请求

2024-04-26 04:42:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python脚本获得的结果填充数据库。我在POST请求中发送gzip压缩的数据。在

PHP脚本在中间充当web服务,需要提取gzip数据并获取“sql query”并执行进一步的处理。在

这就是我在Python方面要做的:

Sending a POST request using urllib:

# Data to be sent in POST request, it can be a SQL UPDATE/INSERT or SELECT
dictheaders = {'sql': "UPDATE 'logs' SET 'some_value' = Failed"}

# Encode the data
data = urllib.urlencode(dictheaders)

# Gzip compress the encoded data
IO = StringIO.StringIO()
gzip_data = gzip.GzipFile(fileobj=IO, mode='w')
gzip_data.write(data)
gzip_data.close()
gzip_data = IO.getvalue()

# This is the POST request being sent to a PHP web services file which
# needs to extract the gzipped query and then execute the query on SQL
f = urllib2.urlopen('http://x.x.x.x/example.php', gzip_data)

以下是我在PHP端尝试的更改:

^{pr2}$

上面的代码似乎与我的Python代码不兼容。这是在PHP中提取gzip POST请求的正确方法吗?在


Tags: theto数据io脚本websqldata
2条回答

试着替换这个:

# Gzip compress the encoded data
IO = StringIO.StringIO()
gzip_data = gzip.GzipFile(fileobj=IO, mode='w')
gzip_data.write(data)
gzip_data.close()
gzip_data = IO.getvalue()

有了这个:

^{pr2}$

当您真正想要的只是compress数据时,不需要生成gzip文件。在

PHP方面很好,只需删除substr,因为它们不再需要了。但是,您将未压缩的字符串视为一个数组,这将不起作用。您需要在PHP端解码查询字符串。我个人只是用JSON来处理这个问题。在

您使用了gzip.GzipFile,它编写了一个gzip文件头,在将数据传递到gzinflate之前,您需要去除数据;然后,从代码的外观来看,您可能需要对其执行类似于parse_str的操作:

$str = gzinflate(substr($postdata, 10, -8));
parse_str($str, $a);
echo $a['sql'];

另外,在python代码中,这一行可能有一个输入错误或基本错误:

dictheaders = {'sql', 'SELECT * FROM employees'}

试试这个:

dictheaders = {'sql': 'SELECT * FROM employees'}

相关问题 更多 >

    热门问题