Java Android HttpURLConnection-意外状态行:

Java Android HttpURLConnection-意外状态行:,java,android,httprequest,httpurlconnection,Java,Android,Httprequest,Httpurlconnection,我已经为一个问题挣扎了一段时间,这让我发疯 我有一些使用HttpClient不推荐的方法的(工作)代码。这段代码只是在我的web服务器上调用一个PHP脚本,并读取它返回的字符串。我决定将其更新为HttpURLConnection,这样代码就可以“与时俱进” 以下是正在运行的、不推荐使用的代码: URL url = new URL(link); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet();

我已经为一个问题挣扎了一段时间,这让我发疯

我有一些使用HttpClient不推荐的方法的(工作)代码。这段代码只是在我的web服务器上调用一个PHP脚本,并读取它返回的字符串。我决定将其更新为HttpURLConnection,这样代码就可以“与时俱进”

以下是正在运行的、不推荐使用的代码:

URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();

String nullFragment = null;
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), nullFragment);
request.setURI(uri);

HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

String inputLine;
while ((inputLine = in.readLine()) != null){
    this.finalString = inputLine;
}
简单的东西,很好用

此代码旨在调用一个PHP脚本,该脚本不断返回一个简单字符串。这个字符串总是简单而简短的,比如“OK_1”、“ERR_TYPE_1”、“OK_2”等等

所以我尝试使用HttpURLConnection将这个非常简单的代码更新为一个非常简单的方法。 我尝试了许多变体,但要点如下:

StringBuilder sb = new StringBuilder();

BufferedInputStream bis = null;
URL url = null;
try {
    url = new URL(urlString);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();

    con.setConnectTimeout(10000);
    con.setReadTimeout( 10000 );

    bis = new java.io.BufferedInputStream(con.getInputStream());
    BufferedReader reader = new BufferedReader(new InputStreamReader(bis));
    String line = null;

    while ((line = reader.readLine()) != null)
        sb.append(line);

    bis.close();

} catch (MalformedURLException e) {
    e.printStackTrace();
}catch (IOException e) {
    e.printStackTrace();
}
无论我运行何种变体,当我尝试调用getInputStream时,我始终会出现意外的状态行:

The exception is:
java.net.ProtocolException: Unexpected status line: 
请注意,它显示意外的状态行值为“空”

我意识到这是一个可能与服务器端相关的问题,但我的php脚本总是只返回我提到的单个字符串。我能帮上忙吗?我真的很感激任何提示,因为我即将放弃并回到HttpClient,尽管它是一种不推荐的方法,但它仍然工作得很好

任何帮助都将不胜感激

编辑: Logcat异常打印:

11-26 08:57:02.602 1109-1954/app.mission.manager W/System.err: java.net.ProtocolException:意外状态行:11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.StatusLine.(StatusLine.java:38) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:180) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:636) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:397) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:341) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:509) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at app.mission.manager.Login$LoginValidator.doInBackground(Login.java:82) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at app.mission.manager.Login$LoginValidator.doInBackground(Login.java:39) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at android.os.AsyncTask$2.call(AsyncTask.java:292)11-2608:57:02.603 1109-1954/app.mission.manager W/System.err:at java.util.concurrent.FutureTask.run(FutureTask.java:237)11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 11-26 08:57:02.603 1109-1954/app.mission.manager W/System.err:at run(Thread.java:818)


你可以试试这段代码,如果它仍然不起作用,我肯定这是服务器端的问题

try {
    URL url = new URL(urlString);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setConnectTimeout(10000);
    connection.setReadTimeout(10000); 

    int responseCode = connection.getResponseCode();
    if(responseCode == 200) {
        InputStream content = connection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();

        String line;
        while ((line = reader.readLine()) != null)
        {
            sb.append(line);
        }
        content.close();
    }
}catch (Exception ex) {
    Log.e(TAG, "Failed to send HTTP request due to: " + ex);
} finally {
    connection.disconnect();
}

你是说你读到的那句话出乎意料吗?但是没有抛出异常?对不起,我忘了提到,抛出了一个异常:java.net.ProtocolException:意外状态行:谢谢'url=newurl(urlString);'。urlString的值是多少?请注意,它显示意外的状态行值为“空”。对不起,我们看不到。发布更多日志。我已经发布了请求时日志显示的内容。干杯。谢谢,但完全一样:未能发送HTTP请求,原因是:java.net.ProtocolException:意外状态行: