ProtocolException: недопустимый заголовок:: на HTTPRequest

Это действительно странно. У меня есть функция, которая выглядит примерно так же, но не вызывает исключения. Вот проблемный код:

public Header[] generateHeaders() {
    Header[] headers = new Header[2];
    headers[0] = new BasicHeader("Client", "android");
    headers[1] = new BasicHeader("Accept", "application/json; charset=UTF-8");
    return headers;
}

public HttpPost getHttpRequestPost() throws URISyntaxException {
    HttpPost request = new HttpPost(new URI(generateQueryUrl()));
    request.setHeaders(generateHeaders());
    setTimeout(request);

    return request;
}

protected Query buildQuery() {
    Query query = null;

    query = new Query(new Config(), getContext());
    query.addOrderedParam(FUNCTION_NAME);

    return query;
}

Код ниже вызывает ClientProtocolException, именно это: Caused by: org.apache.http.ProtocolException: Invalid header: :

public HttpResponse execute() throws URISyntaxException, ClientProtocolException,
        IOException {
    HttpClient client = new DefaultHttpClient();
    HttpResponse response = response = client.execute(buildQuery().getHttpRequestPost());
    return response;
}

Он не указывает ни на один из двух заголовков, а как какой-то пустой заголовок. Что здесь происходит?

Исключение происходит внутри client.execute (...), очевидно, я не могу отлаживать там ...

Это могут быть заголовки ответов ... но я не вижу ничего плохого в скрипачке. Вот тело запроса и ответа:

Запрос

GET http://myapp.api.pl/api/bankName?accountNumber=32195000012006548541990002 HTTP/1.1
User-Agent: Fiddler
Accept: application/json
Client: android
Host: myapp.api.pl

Ответ

HTTP/1.1 404 Not Found
Date: Tue, 12 Nov 2013 08:35:01 GMT
Server: Apache
X-Powered-By: PleskLin
Content-Length: 0
Connection: close
Content-Type: application/json; charset=UTF-8

Хорошо, я немного соврал, не все в порядке со скрипачом. Если в параметре accountNumber указано неправильное число, функция должна вернуть 404. Это так, но также появляется всплывающее окно с ошибкой в ​​скрипте:

введите описание изображения здесь

РЕДАКТИРОВАТЬ: вставка запрошенной трассировки стека:

11-08 13:09:30.691: W/System.err(20729): org.apache.http.client.ClientProtocolException
11-08 13:09:30.701: W/System.err(20729):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
11-08 13:09:30.711: W/System.err(20729):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-08 13:09:30.711: W/System.err(20729):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-08 13:09:30.721: W/System.err(20729):  at pl.test.helloapp.communication.requests.BaseRequest.execute(BaseRequest.java:75)
11-08 13:09:30.721: W/System.err(20729):  at pl.test.helloapp.async.LoginAsyncTask.doInBackground(LoginAsyncTask.java:51)
11-08 13:09:30.721: W/System.err(20729):  at pl.test.helloapp.async.LoginAsyncTask.doInBackground(LoginAsyncTask.java:1)
11-08 13:09:30.721: W/System.err(20729):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-08 13:09:30.731: W/System.err(20729):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-08 13:09:30.731: W/System.err(20729):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-08 13:09:30.731: W/System.err(20729):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-08 13:09:30.731: W/System.err(20729):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-08 13:09:30.731: W/System.err(20729):  at java.lang.Thread.run(Thread.java:841)
11-08 13:09:30.731: W/System.err(20729): Caused by: org.apache.http.ProtocolException: Invalid header: : 
11-08 13:09:30.731: W/System.err(20729):  at org.apache.http.impl.io.AbstractMessageParser.parseHeaders(AbstractMessageParser.java:162)
11-08 13:09:30.731: W/System.err(20729):  at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:178)
11-08 13:09:30.741: W/System.err(20729):  at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
11-08 13:09:30.741: W/System.err(20729):  at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
11-08 13:09:30.741: W/System.err(20729):  at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
11-08 13:09:30.741: W/System.err(20729):  at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
11-08 13:09:30.741: W/System.err(20729):  at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
11-08 13:09:30.741: W/System.err(20729):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
11-08 13:09:30.751: W/System.err(20729):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-08 13:09:30.751: W/System.err(20729):  ... 11 more

person Jacek Kwiecień    schedule 08.11.2013    source источник
comment
не могли бы вы вставить трассировку стека?   -  person ciny    schedule 08.11.2013
comment
вставлена ​​запрошенная трассировка стека   -  person Jacek Kwiecień    schedule 08.11.2013
comment
попробуйте заменить generateQueryUrl на google.com или что-то еще, что должно быть действительным. если это сработает, то виноват ваш сервер ~   -  person afpro    schedule 11.11.2013
comment
URL действителен точно   -  person Jacek Kwiecień    schedule 12.11.2013
comment
HeaderName отсутствует в информации вашего заголовка. Попробуйте сосредоточиться на этом.   -  person Subramanian Ramsundaram    schedule 12.11.2013
comment
ошибка все еще существует? i curl то и вроде все нормально. я думаю, X-Powered-By: PleskLin вызывает эту ошибку. Теперь мой результат завивки кажется прекрасным, X-Powered-By: PleskLin нет.   -  person afpro    schedule 18.11.2013


Ответы (2)


Сервер кажется ответом с недопустимыми заголовками http.

Я предполагаю, что исключение было вызвано из 'org.apache.http.message.BufferedHeader':

    if (buffer == null) {
        throw new IllegalArgumentException
            ("Char array buffer may not be null");
    }
    int colon = buffer.indexOf(':');
    if (colon == -1) {
        throw new ParseException
            ("Invalid header: " + buffer.toString());
    }
    String s = buffer.substringTrimmed(0, colon);
    if (s.length() == 0) {
        throw new ParseException
            ("Invalid header: " + buffer.toString());
    }
    this.buffer = buffer;
    this.name = s;
    this.valuePos = colon + 1;

можно ли выгрузить полное тело http с помощью tcp dump или перечислить с помощью curl?

person afpro    schedule 11.11.2013
comment
на данный момент я могу предположить отказ сервера, но все еще не могу указать на ошибку. Не могли бы вы посмотреть отредактированный вопрос? Вставленные тела запроса и ответа со всплывающим окном ошибки скрипта - person Jacek Kwiecień; 12.11.2013
comment
Я согласен с afpro, эта ошибка исходит от 'org.apache.http.message.BufferedHeader'. Похоже, ваш сервер получил поддельный ответ. Я предполагаю, что вы это исправили? Я сделал curl -v http://myapp.api.pl/api/bankName?accountNumber=32195000012006548541990002, и теперь все выглядит нормально. - person ajh158; 17.11.2013
comment
это даже не был настоящий помощник по адресу api: D - person Jacek Kwiecień; 18.11.2013
comment
это не совсем то, что решило проблему, но наверняка было ближайшим, так что награда за вами - person Jacek Kwiecień; 18.11.2013

Мне не удалось решить проблему с помощью этого кода. Я поменял платформу связи на другую. У Apache HTTPClient были проблемы с этими ответами, но для HttpURLConnection все было нормально, поэтому я отказался от использования Apache.

person Jacek Kwiecień    schedule 18.11.2013