1

これはApacheログで確認できます。基本的に、リクエストはを使用してAndroidエミュレータから送信されHTTPUrlConnectionます。これが私のコードです。

                URL url = new URL(strUrl);  
            Log.d(params[0],"UR");  


            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(toencode, Base64.DEFAULT));
            conn.setRequestProperty("Host", "www.domain.com");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:1.3.1)");
            conn.setRequestProperty("Accept-Charset", "UTF-8");
            conn.setRequestMethod("GET");

            conn.setConnectTimeout (30000) ; 
            conn.setDoOutput(true); 
            conn.setDoInput(true); 
            conn.connect();
            String data = conn.getInputStream().toString();
            return data;

サーバーが認識できないユーザーエージェントをフィルタリングしていないことを確認するために、user-agentヘッダーを送信しています。Wiresharkを使用してトラフィックをキャプチャしました。リクエストは大丈夫のようです。他に何を探すべきかわからない。運がなくてこれに何時間も費やしている。

 GET Authenticate/ HTTP/1.1\r\n
 Host: www.domain.com\r\n
 User-Agent: Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:1.3.1)\r\n
 Accept-Charset: UTF-8\r\n
 Connection: Keep-Alive\r\n
 Accept-Encoding: gzip\r\n
 \r\n

サーバーからの応答:

 Request Version: HTTP/1.1
 Status Code: 400
 Response Phrase: Bad Request


 <h1>Bad Request</h1>\n
 <p>Your browser sent a request that this server could not understand.<br />\n

およびapacheログ:

 client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23)

この時点で、HttpClientに戻って試してみる必要があると感じています。HttpUrlConnectionグーグルが勧めているので使うべきだと思いました。しかし、私は運がありませんHttpURLConnection

誰かが何か考えを持っていますか?

4

1 に答える 1

3

エミュレータがホストヘッダーを正しく送信していませんでした。だから私はサーバーから悪いリクエストを受け取っていました。Wiresharkは、この問題の解決に役立ちました。

于 2012-09-15T05:16:43.707 に答える