gpt4 book ai didi

qt - 使用PyQt4 QNetworkAccessManager.post()方法时如何防止表单数据中的 '+'被空格替换

转载 作者:可可西里 更新时间:2023-11-01 17:26:32 25 4
gpt4 key购买 nike

我的目标是使用 Python 2.7 和 PyQt4.QtNetwork.QNetworkAccessManager.post( ) 方法。

这本身不是问题。

问题是我的 value 是一个包含 '+' 的字符串,例如'a+b c',我需要它保持 '+',但是 post() 方法将其转换为空格,因此在原始请求中,我的示例值变为 'a b c'

有谁知道是否有一些(最好是简单的)方法来防止这种情况发生?

下面提供了一个最小的例子:

import sys
from PyQt4 import QtGui, QtCore, QtNetwork

def slot_close(reply_obj):
print 'request sent by manager.post():\n'
print reply_obj.readAll()
reply_obj.deleteLater()
app.quit()

app = QtGui.QApplication(sys.argv)

request = QtNetwork.QNetworkRequest(QtCore.QUrl('http://httpbin.org/post'))
request.setHeader(QtNetwork.QNetworkRequest.ContentTypeHeader,
'application/x-www-form-urlencoded')

manager = QtNetwork.QNetworkAccessManager()
manager.finished.connect(slot_close)

form_data = QtCore.QUrl()
form_data.addQueryItem('my_key', 'a+b c')
urlencoded_form_data = form_data.encodedQuery()

# Show that the urlencoded_form_data still has a '+'
print 'urlencoded_form_data:\n{}\n'.format(urlencoded_form_data)

manager.post(request, urlencoded_form_data)

app.exec_()

请注意,例如requests.post() 方法确实实现了我的目标,启动起来更省力,但不幸的是我需要使用 QtNetwork。

最佳答案

一种替代方法是像这样对查询项进行显式编码:

formdata.addEncodedQueryItem('my_key', QUrl.toPercentEncoding('a+b c'))

请注意,严格来说,如果 key 可以包含非 ASCII 字符或保留字符,则第一个参数应以相同的方式编码。 toPercentEncoding函数使您可以完全控制对哪些字符进行编码,默认情况下,它会做正确的事情。但也要注意 addEncodedQueryItem它自己不做任何检查,因此由调用者来确保两个参数都正确编码。

关于qt - 使用PyQt4 QNetworkAccessManager.post()方法时如何防止表单数据中的 '+'被空格替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45719573/

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