2013-04-10 1 views
1

Я хочу отправить заявку на сайт. Ниже приведен код python.curl command Chinese/Japanese url encode

# -*- encoding=utf-8 -*- 
import urllib, urllib2 

url = "http://xxx.com/login.asp" 
req = urllib2.urlopen(url, urllib.urlencode({"name":u"汉字".encode('GB2312'),"id":u"12345"})) 
print req.read() 

Но код bash возвращает неверную страницу. Это проблема кодирования или что-то еще?

url="http://xxx.com/login.asp" 
curl --data-urlencode "name=汉字&id=12345" $url 
+0

Обнаружено подозрительное отсутствие "GB2312" в источнике bash. –

+0

Какой у вас скручивание -v? –

ответ

1
In [4]: urllib.urlencode({"name":"汉字".decode('utf-8').encode('GB2312'),"id":u"12345"}) 
Out[4]: 'name=%BA%BA%D7%D6&id=12345' 

Согласно завитка страницы человека,

--data-urlencode <data> 
     ... 
     The <data> part can be passed to 
     curl using one of the following syntaxes: 
     ... 
     name=content 
     This will make curl URL-encode the content part and pass that on. 
     Note that the name part is expected to be URL-encoded already. 

С локон будет URL-закодировать содержимое, мы должны передать ему строку, которая не является уже URL-закодированы:

In [7]: urllib.unquote(urllib.urlencode({"name":"汉字".decode('utf-8').encode('GB2312'),"id":u"12345"})) 
Out[7]: 'name=\xba\xba\xd7\xd6&id=12345' 

Поэтому попробуйте

url="http://xxx.com/login.asp" 
curl --data-urlencode 'name=\xba\xba\xd7\xd6&id=12345' $url