うまくいけば、あなたの何人かが私の「頭脳の行き詰まり」を手伝ってくれるでしょう。
(理解のために)php-scriptを使用してデータベースを受信しようとしています。したがって、有効なユーザー名/ pwd-comboを使用し、適切なパラメーターを送信している場合にのみ、php-scriptにアクセスできるwebadress/serverを呼び出す必要があります。
私のコードは、HttpClientとHttpPostを使用すると正常に機能します。(GOODコードの下)
InputStream myInputDB = null;
OutputStream myOutputDB = null;
HttpResponse response = null;
// Path to the just created empty db
String dbFilePath = DB_PATH + KeyConstants.DB_NAME;
try {
// Creating HTTP client
HttpClient httpClient = new DefaultHttpClient();
// Creating HTTP Post
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("version", "20110516140000"));
HttpPost httppost = new HttpPost("http://USERNAME:PASSWORD@SomeAdress/u/db2.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpClient.execute(httppost);
//Open your local db as the input stream
myInputDB = response.getEntity().getContent();
//Open the empty db as the output stream
myOutputDB = new FileOutputStream(dbFilePath);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInputDB.read(buffer)) > 0) {
myOutputDB.write(buffer, 0, length);
}
//Close the streams
myOutputDB.flush();
myOutputDB.close();
myInputDB.close();
今、私は上記の解決策の代わりにHttpURLConnection/HttpsURLConnectionを使用しようとしています。なぜ明確にする必要があるのか、ライブシステムはHTTPS(サーバー認証)を使用します。
今では、私は方法を理解しようとして何日も無駄にしています...
- HttpURLConnectionを使用したPOSTパラメーター
- サーバーで認証する
- 認証を避けてください-一般的にチェックしてください(テストのために!)
どこで間違いを犯しているのかわかりません。これまでの私のコードの下に...
String urlString = "http://USERNAME:PASSWORD@SomeAdress/u/db2.php";
String params = "version=20110516140000";
InputStream stream = null;
url = new URL(urlString);
if (url.getProtocol().toLowerCase().equals("https")) {
trustAllHosts();
HttpsURLConnection urlconn = (HttpsURLConnection) url.openConnection();
urlconn.setHostnameVerifier(DO_NOT_VERIFY);
urlconn.setDoInput(true);
urlconn.setDoOutput(true);
urlconn.setRequestMethod("POST");
urlconn.setRequestProperty("Content-Type", "text/xml");
urlconn.setRequestProperty("Content-Length", String.valueOf(params.getBytes().length));
OutputStreamWriter wr = new OutputStreamWriter(urlconn.getOutputStream());
wr.write(params);
wr.flush();
stream = urlconn.getInputStream();
if ("gzip".equals(urlconn.getContentEncoding())) {
stream = new GZIPInputStream(stream);
}
wr.close();
} else {
// Almost the same as if-path, but without trustAllHosts() and with HttpURLConnection instead of HttpsURLConnection
}
return stream;
必要なのはInputStreamで、これをAndroidフォンに保存/コピーできます(作業コードのように)。今では、私が得る結果はIOExceptionです。urlconn.getInputStream()が呼び出されるとすぐに、アクティビティは中止されます。ただし、getOutputStream()にも有効な値はありません。
さて、質問に移りましょう。誰かが私のコードを確認して、パラメータを正しい方法でPOSTする方法を教えてもらえますか?それに加えて、URL経由で認証を送信できるかどうか知っていますか?特にHTTPの「S」の部分に興味があります。非セキュアモードの場合、私はすでに実行中のソリューションを持っています。
ご協力いただきありがとうございます!