我已经使用 URLFetch 类在 Google App 引擎中将 HTTP Post 发送到我的 php 文件(在某些不同的网站上)。
这就是我所拥有的
try{
byte[] data = ("EMAIL=bo0@gmail.com&TITLE=evolution&COMMENT=comments&PRICE=5000").getBytes("UTF-8");
URL url = new URL("http://www.box.com/nost.php");
HTTPRequest request = new HTTPRequest(url, HTTPMethod.POST);
request.setPayload(data);
HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(request);
}
现在,当我在本地部署时,这似乎工作得很好。但是,当我在谷歌应用引擎上发布时,这只适用于一半的时间。(即,即使有完全相同的数据,我不止一次按帖子,它可能是错误或成功)
由于我没有更改任何数据,这似乎是完全随机的。谁能给我建议为什么会这样?
编辑:这是一个工作代码似乎我的 php 在某些时候阻止了 gae 正在发出的 http 请求。我通过在 catch 块中使用递归来修复,以继续尝试直到成功。
try {
URL url = new URL("http://www.mywebsite.com/myfile.php");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write("EMAIL="+URLEncoder.encode("sam@gmail.com", "UTF-8")+
"&TITLE="+URLEncoder.encode("myTitle", "UTF-8")+
"&PRICE="+URLEncoder.encode(String.valueOf(10000), "UTF-8"));
writer.close();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// OK
return true;
} else {
// Server returned HTTP error code.
//keep retrying until you succeed!! fighting!!
return newPost(postComponent);
}
} catch (MalformedURLException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
catch (Exception e){
e.printStackTrace();
//ah dam probably server is down so you went stack overflow I give up
return false;
}