从Java到Python的POST请求转换失败

2024-09-28 15:02:57 发布

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

我遇到了一个需要将一个显然简单的Java代码翻译成Python的情况。在

Java代码只是对一个包含三个参数的URL发出POST请求。代码如下:

{
 java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
 String content = "phonenr=" + smsPhone + "&smstxt=" + smsMessage + "&Submit=SendSms";

 java.net.URL url = new java.net.URL(smsGatewayPath);
 java.net.HttpURLConnection urlCon = (java.net.HttpURLConnection) url.openConnection();

 urlCon.setReadTimeout(5000);
 urlCon.setDoInput(true);
 urlCon.setDoOutput(true);
 urlCon.setUseCaches(false);
 urlCon.setRequestMethod("POST");

 urlCon.setRequestProperty("Content-Length", Integer.toString(content.length()));
 urlCon.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
 urlCon.setRequestProperty("Authorization", "Basic " + authStringEncoded);

 java.io.DataOutputStream output = new java.io.DataOutputStream(urlCon.getOutputStream());

 output.writeBytes(content);

 output.flush();
 output.close();

 java.io.DataInputStream input = new java.io.DataInputStream(urlCon.getInputStream());

 int bufSize = 4096;
 byte[] bytesRead = new byte[bufSize];
 int bytesReadLength = 0;

 while ((bytesReadLength = input.read(bytesRead)) > 0) {
  baos.write(bytesRead, 0, bytesReadLength);
 }

 input.close();
 baos.close();

 return org.apache.commons.lang.StringEscapeUtils.unescapeJava(baos.toString("UTF-8"));

}

现在,我尝试在Python中发出相同的请求,将完全相同的数据发布到同一个URL:

^{pr2}$

现在,我得到的输出是:

<html>
<head>
<title>TopexGateway</title></head>
<body bgcolor="#00CCFF" text="#000000">
ERROR
</body>
</html>

http://ip/name.cgi
200

现在我有点搞不懂为什么这不起作用,因为当我发出一个CURL请求时,一切似乎都有效:

curl -v --data "phonenr=xxxxx&smstxt=Test&Submit=SendSms" http://admin:password@ip/name.cgi

Here是从CURL接收的内容和使用Python接收到的here的粘贴。在

谁能告诉我我的python版本有什么问题吗?在


Tags: 代码iourlnewcloseinputoutputnet