HttpClient statusCodes - PullRequest
       0

HttpClient statusCodes

2 голосов
/ 07 января 2012

Я использую HttpCLient для автоматического входа на сайт.Я получаю statusCode как '200'.API говорит SC 200 - ОК.что это значит?Логин установлен?Когда я вижу список кодов состояния, появляется SC Accepted - 202. В чем разница между Accepted и OK.Если логин установлен, какой код статуса я должен получить?Пожалуйста, помогите.

pesudo-код, если это поможет ответить:

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class HttpTest {
    public static void main(String args[]) throws HttpException, IOException {

    HttpClient client = new HttpClient();

    // make the initial get to get the SESSION cookie
    GetMethod get = new GetMethod(
    "http://www.yahoo.com/");
    client.executeMethod(get);
    get.releaseConnection();

    // authorize
    PostMethod post = new PostMethod(
    "https://login.yahoo.com/config/login?");
    NameValuePair[] data = {
    new NameValuePair("login", "aaa@yahoo.com"),
    new NameValuePair("passwd", "bbb")
    };
    post.setRequestBody(data);
    client.executeMethod(post);
    post.releaseConnection();

    //resubmit the original request
    client.executeMethod(get);
    String response = get.getResponseBodyAsString();
    get.releaseConnection();
    System.out.println("Status Code :::"+get.getStatusCode());
    System.out.println(response);    
    }
}

Это аутентификация на основе формы, которую я пытался.Я получаю ту же самую проблему здесь ... 200-хорошо для неправильных полномочий.Я использую общий сайт, как Yahoo, чтобы войти.Любой совет?

Ответы [ 5 ]

4 голосов
/ 07 января 2012

Коды состояния Java HttpClient совпадают с кодами состояния, определенными в RFC1945 (HTTP 1.0), RFC2616 (HTTP 2.0) и RFC2618 (WebDAV).

Эти конкретные коды означают:

200 OK

Запрос успешно выполнен.Информация, возвращаемая с ответом, зависит от метода, используемого в запросе, например:

GET в ответе отправляется объект, соответствующий запрошенному ресурсу;

HEAD заголовок объектаполя, соответствующие запрашиваемому ресурсу, отправляются в ответе без какого-либо тела сообщения;

POST - объект, описывающий или содержащий результат действия;

TRACE - объект, содержащий сообщение запроса, как получено.конечным сервером.

202 Принято

Запрос принят к обработке, но обработка не завершена.Запрос может или не может в конечном итоге быть обработан, так как он может быть отклонен, когда обработка действительно имеет место.Нет возможности для повторной отправки кода состояния из асинхронной операции, такой как эта.

Ответ 202 намеренно не является обязательным.Его цель - позволить серверу принять запрос для какого-либо другого процесса (возможно, пакетно-ориентированного процесса, который выполняется только один раз в день), не требуя, чтобы соединение пользовательского агента с сервером сохранялось до завершения процесса.Сущность, возвращаемая с этим ответом, ДОЛЖНА включать указание текущего состояния запроса и либо указатель на монитор состояния, либо некоторую оценку того, когда пользователь может ожидать выполнения запроса.

Для определений других общихКоды состояния HTTP см. RFC2616

1 голос
/ 07 января 2012

200 означает, что запрос был успешным , и ответ основан на этом успешном запросе. 202 будет означать, что запрос был успешным и был помещен в очередь для обработки на сервере, поэтому ответ не основан на успешном завершении запроса, поскольку он еще не обязательно завершен.

Думайте об этом как о коротком разговорном обмене ...

200

Клиент: Вот мой запрос
Сервер: Спасибо! Я обработал ваш запрос. Вот ответ, который вы искали.

против

202

Клиент: Вот мой запрос
Сервер: Спасибо! Я еще не закончил обработку, но я просто сообщаю вам, что я получил это, и оно идет полным ходом.

Я не могу себе представить, что вход в систему занимает много времени, поэтому я ожидаю, что успешный вход в систему всегда будет возвращать ответ 200.

0 голосов
/ 07 марта 2017

Мы использовали следующий код для вывода кода состояния.Обратите внимание, что сначала классы - это объекты pojo из ответа сервера:

public void doFirst(int i) throws ClientProtocolException, IOException {

HttpClient client = HttpClientBuilder.create().build();

HttpGet request = new HttpGet("url" + i);
request.addHeader("content-type", "application/json");
HttpResponse response1 = client.execute(request);
if(response1.getStatusLine().getStatusCode() != 200){
    System.err.println(response1.getStatusLine().getStatusCode());
}
String json = EntityUtils.toString(response1.getEntity(), "UTF-8");
Gson gson = new Gson();
first ress = gson.fromJson(json, first.class);
System.out.println("Incoming data: " + ress.getNumber());

/////some action///////
HttpPost post = new HttpPost("url" + i);
firstSol sol= new firstSol();
sol.setNumber(k);
System.out.println("Data to send : " + gson.toJson(sol) );
post.setEntity(new StringEntity(gson.toJson(sol)));
client.execute(post);
HttpResponse response2 = client.execute(request);
if(response2.getStatusLine().getStatusCode() != 200){
System.err.println(response2.getStatusLine().getStatusCode());
}
}

Вы можете взглянуть на следующие зависимости maven, чтобы это работало:

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
0 голосов
/ 07 января 2012

Просмотрите этот список: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

Но, как сказал Милан, вам следует проверить API и убедиться, что API использует эти коды ошибок так же, как в стандарте говорится, что их следует использовать.

Например, вы можете попробовать войти в систему, получить 200, но возвращенная полезная нагрузка содержит сообщение об ошибке входа в систему.

Реализация с лучшим поведением вернула бы 200 для хорошего входа и 401 или 403 для плохого входа.

0 голосов
/ 07 января 2012

202 Accepted означает, что ваш запрос обрабатывается получателем (что-то похожее на то, что я получил, ваше приложение изучит).

200 OK означает, что ваша заявка была обработана и получила то, что вы запросили (может ли это быть запрос на вход в систему (или) для другого ресурса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...