URLFetch クラスを使用して、Google App エンジンで HTTP Post を PHP ファイル (別の Web サイト) に送信しました。
これは私が持っているものです
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);
}
ローカルに展開すると、これは完全にうまくいくようです。ただし、Google App Engine で公開すると、半分の時間しか機能しません。(つまり、まったく同じデータを使用しても、投稿を複数回押すと、エラーまたは成功のいずれかになります)
私はデータを変更していないので、これは完全にランダムに見えます。なぜこれが起こっているのか、誰かアドバイスをもらえますか?
編集: これは動作するコードです。私の php は、gae が作成している http 要求をブロックしていたようです。キャッチブロック内で再帰を使用して、成功するまで試行を続けることで修正しました。
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;
}