curl post 请求在存在特殊字符时失败
curl post request failing in the presence of special characters
好的,我知道关于这个话题的问题已经太多了;阅读其中的每一篇都没有帮助我解决我的问题。
我的网页上有“hello'©”。我的 objective 是将此内容获取为 json,去掉 "hello" 并将剩余内容写回,即“'©”返回页面。
我正在使用 CURL POST 请求写回网页。我获取 json 的代码如下:
request = urllib2.Request("http://XXXXXXXX.json")
user = 'xxx'
base64string = base64.encodestring('%s:%s' % (xxx, xxx))
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request) #send URL request
newjson = json.loads(result.read().decode('utf-8'))
此时我的newres是unicode字符串。我发现我的 curl post 请求仅适用于百分比编码(例如“%A3”代表英镑)。
最好的方法是什么?我写的代码如下:
encode_dict = {'!':'%21',
'"':'%22',
'#':'%24',
'$':'%25',
'&':'%26',
'*':'%2A',
'+':'%2B',
'@':'%40',
'^':'%5E',
'`':'%60',
'©':'\xa9',
'®':'%AE',
'™':'%99',
'£':'%A3'
}
for letter in text1:
print (letter)
for keyz, valz in encode_dict.iteritems():
if letter == keyz:
print(text1.replace(letter, valz))
path = "xxxx"
subprocess.Popen(['curl','-u', 'xxx:xxx', 'Content-Type: text/html','-X','POST','--data',"text="+text1, ""+path])
此代码给我一个错误提示“UnicodeWarning:Unicode 相等比较未能将两个参数转换为 Unicode - 将它们解释为不相等
如果字母 == keyz:"
有更好的方法吗?
问题出在编码上。 json.loads() returns 字节流,需要使用 decode() 函数解码为 unicode。然后,我通过使用 encode('ascii','xmlcharrefreplace') 将 unicode 编码为 ascii 编码来替换所有非 ascii 字符。
newjson = json.loads(result.read().decode('utf-8').encode("ascii","xmlcharrefreplace"))
此外,学习 unicode 基础知识对我帮助很大! This 是一个很好的教程。
好的,我知道关于这个话题的问题已经太多了;阅读其中的每一篇都没有帮助我解决我的问题。
我的网页上有“hello'©”。我的 objective 是将此内容获取为 json,去掉 "hello" 并将剩余内容写回,即“'©”返回页面。
我正在使用 CURL POST 请求写回网页。我获取 json 的代码如下:
request = urllib2.Request("http://XXXXXXXX.json")
user = 'xxx'
base64string = base64.encodestring('%s:%s' % (xxx, xxx))
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request) #send URL request
newjson = json.loads(result.read().decode('utf-8'))
此时我的newres是unicode字符串。我发现我的 curl post 请求仅适用于百分比编码(例如“%A3”代表英镑)。
最好的方法是什么?我写的代码如下:
encode_dict = {'!':'%21',
'"':'%22',
'#':'%24',
'$':'%25',
'&':'%26',
'*':'%2A',
'+':'%2B',
'@':'%40',
'^':'%5E',
'`':'%60',
'©':'\xa9',
'®':'%AE',
'™':'%99',
'£':'%A3'
}
for letter in text1:
print (letter)
for keyz, valz in encode_dict.iteritems():
if letter == keyz:
print(text1.replace(letter, valz))
path = "xxxx"
subprocess.Popen(['curl','-u', 'xxx:xxx', 'Content-Type: text/html','-X','POST','--data',"text="+text1, ""+path])
此代码给我一个错误提示“UnicodeWarning:Unicode 相等比较未能将两个参数转换为 Unicode - 将它们解释为不相等 如果字母 == keyz:"
有更好的方法吗?
问题出在编码上。 json.loads() returns 字节流,需要使用 decode() 函数解码为 unicode。然后,我通过使用 encode('ascii','xmlcharrefreplace') 将 unicode 编码为 ascii 编码来替换所有非 ascii 字符。
newjson = json.loads(result.read().decode('utf-8').encode("ascii","xmlcharrefreplace"))
此外,学习 unicode 基础知识对我帮助很大! This 是一个很好的教程。