我是Python的请求部分的新手,在这里遇到了一些麻烦 . 我在Java中有以下示例,它完美地工作...
public class teste {
//The variable “text” must have all parameters. For instance, it could be
//-b –m 4 –d –tree removeAll –t TEXT, TEXT, TEXT
private static void sendPost(String text) throws Exception {
//Sobek’s URL
URL url = new URL("http://sobek.ufrgs.br/webservice/sobek.php");
//Please pay attention to the constant value “data”
String postData = "data= "+ URLEncoder.encode(text);
byte[] postDataBytes = postData.getBytes();
//Connect to the URL
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
//Send the information
conn.getOutputStream().write(postDataBytes);
//Read the server response
Reader in = new BufferedReader(new
InputStreamReader(conn.getInputStream(), "UTF-8"));
for (int c; (c = in.read()) >= 0;)
System.out.print((char)c);
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String params = "-b –m 4 – tree removeAll -t TEXT";
sendPost(params);
}
}
但我的软件是用Python编写的,所以我需要转换代码..我这样做了:
sobekURL = "sobek.ufrgs.br/webservice/sobek.php"
file_name = "Livro_MidiasNaEducacao_P1_rev3-cris2107.docx"
text = docx2txt.process(file_name)
parameters = "-b –m 4 – tree removeAll -t " + text
postData = "data=" + urllib.parse.quote_plus(parameters)
postDataBytes = bytearray(postData, 'utf8')
headers={
"Content-type" : "application/x-www-form-urlencoded",
"Content-size" : str(len(postDataBytes))
}
conn = http.client.HTTPConnection(sobekURL)
conn.request("POST",parameters,headers)
response=conn.getresponse()
print(response.status, response.reason)
data=response.read()
print(data)
conn.close()
conn.setRequestProperty();
我有很多错误,1by1解决它..但现在我得到了这个:
Traceback(最近一次调用最后一次):文件“C:\ Users \ alvarosps \ workspace \ SobekMiningCorpus \ AccessWebService.py”,第23行,conn.request(“POST”,参数, Headers )文件“C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ http \ client.py“,第1239行,请求self._send_request(方法,url,正文, Headers ,encode_chunked)文件”C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ http \ client.py“,第1250行,在_send_request self.putrequest(方法,网址,**跳过)文件”C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ http \ client.py“,第1117行,在putrequest中self._output(request.encode('ascii'))UnicodeEncodeError:'ascii'编解码器无法对位置8中的字符'\ u2013'进行编码:序数不在范围内(128)
有人可以帮忙吗?
编辑:我已经将参数参数更改为parameters.encode(“utf-8”)并解决了这个问题..但现在我得到了这个:**
回溯(最近一次调用最后一次):文件“C:\ Users \ alvarosps \ workspace \ SobekMiningCorpus \ AccessWebService.py”,第23行,conn.request(“POST”,“/”,parameters.encode('utf- 8'),headers)文件“C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ http \ client.py”,第1239行,请求self._send_request(方法,url,正文, Headers ) ,encode_chunked)文件“C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ _ http \ client.py”,第1285行,在_send_request中self.endheaders(body,encode_chunked = encode_chunked)文件“C: \ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ http \ client.py“,第1234行,在endheaders中self._send_output(message_body,encode_chunked = encode_chunked)文件”C:\ Users \ alvarosps \ AppData \本地\ Programs \ Python \ Python36 \ lib \ http \ client.py“,第1026行,在_send_output self.send(msg)文件”C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ http \ client.py“,第964行,在send self.connect()文件”C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Pytho n36 \ lib \ http \ client.py“,第936行,在connect(self.host,self.port),self.timeout,self.source_address)文件”C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ socket.py“,第704行,在get_drinfo(host,port,0,SOCK_STREAM)中的res的create_connection中:文件”C:\ Users \ alvarosps \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ socket.py“,第743行,在getaddrinfo中为_socket.getaddrinfo中的res(host,port,family,type,proto,flags):socket.gaierror:[Errno 11001] getaddrinfo failed
**
它与发布的链接不是同一个问题,它使用不同的库,那里的答案没有解决任何问题 .