2012-01-06 7 views
2

HttpCLientを使用してWebサイトに自動ログインしています。私はstatusCodeを '200'として取得しています。 APIはSC 200 - OKと言っています。どういう意味ですか?ログインは確立されていますか? statusCodesのリストが表示されたら、SC Accepted - 202が表示されます。AcceptedとOKの違いは何ですか。 ログインが確立されている場合、どのステータスコードを取得する必要がありますか?助けてください。HttpClient statusCodes

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", "[email protected]"), 
    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);  
    } 
} 

これは私がしようとしてhvaeフォームベースの認証です。私はここで同じ問題が発生しています...不適切な資格情報の200 - OK。 yahooのような一般的なウェブサイトを使ってログインしています。何かアドバイス?

+2

は実装に依存、あなたはそれらのAPIドキュメントを確認してください彼らが200と210で何を意味するのか。 – milan

+0

他のケースを試してみてください!不正な資格情報でログインを試行し、何が起こるかを確認してください。 –

答えて

4

JavaのHttpClientステータスコードは、RFC1945(HTTP 1.0)、RFC2616(HTTP 2.0)、およびRFC2618(WebDAV)で定義されているステータスコードと同じです。

これらの具体的なコードは、意味:

200 OK

要求が成功しました。応答で返される情報は、要求で使用されるメソッドに依存します。たとえば、次のようになります。

GET要求されたリソースに対応するエンティティが応答で送信されます。

HEAD要求されたリソースに対応するエンティティヘッダフィールドは、メッセージボディなしのレスポンスで送信されます。

POSTアクションの結果を記述または含むエンティティ。

TRACEエンドサーバが受信した要求メッセージを含むエンティティ。

202受け入れ

リクエストは、処理のために受け入れられたが、処理が完了していません。要求が実際に処理されたときに許可されない可能性があるため、要求は最終的に実行されるか、または実行されない可能性があります。このような非同期操作からステータスコードを再送信する機能はありません。

202応答は意図的にコミットされません。その目的は、サーバへのユーザエージェントの接続がプロセスが完了するまで持続することを必要とせずに、サーバが何らかの他のプロセス(おそらく1日に1回だけ実行されるバッチ指向のプロセス)の要求を受け入れることを可能にすることです。このレスポンスで返されたエンティティは、リクエストの現在のステータスとステータスモニタへのポインタの表示、またはユーザがリクエストが実行されると予想できる何らかの見積りを含めるべきです(SHOULD)。他の一般的なHTTPステータスコードの定義については

、私たちは、ステータスコードの出力のための次のコードを使用していたRFC2616

+0

ありがとうございました。私がパスワードを変更したことを再度確認するには、今でもSC 200が見えます。今は分かりません。 – JNPW

+0

詳細情報なしでできることは、HTTP応答の意味を列挙することです。ログインしているシステムの詳細を知らなければ、どのような応答を期待するべきかは実際には言えません。ほとんどのシステムでは、成功か失敗かにかかわらず200 OKを送信する必要がありますが、レスポンスの本文には成功または失敗のステータス(statusCodeが存在するヘッダーではありません)が含まれている必要があります。 –

+0

100%ステータスコード200は、HTTPサーバーがエラーなくパケットを受信し、応答していることを意味します。 statusCodeはおそらく、ほとんどのシステムのログインの成功/失敗を判断するのに適した場所ではありません。 –

0

202 Acceptedは、あなたのリクエストが受信者によって処理されていることを意味します。

は、あなたのアプリケーションが処理され、要求されたもの(ログイン(または)別のリソースの要求)が許可されているかどうかを意味します。

1

200 means the request was successfulこの応答は、その成功した要求に基づいています。 202は、要求が成功し、サーバー上で処理するためにキューに入れられていることを意味するため、応答はまだ完了していないため、要求の正常終了に基づいていません。短い会話のやり取りのようなそれの

だと思う...

200:

クライアント:はここに私の要求である
サーバー:ありがとう!あなたのリクエストを処理しました。ここであなたが探していた回答があります。

202:

クライアント:ここに私の要求
サーバーです:ありがとう!私はまだそれを処理していないが、私はそれを受け取り、それが進行中であることを知らせるだけです。

私はログインに長い時間がかかるとは想像もできません。したがって、正常なログインでは常に200応答を返すと思います。

0

レビューこのリスト:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

しかし、ミランはあなたがAPIを見直し、APIは、これらのエラーコードに標準でそれらを使用すると言うのと同じ方法を使用していることを確認する必要があり述べたように。

たとえば、200を取得するログインを試みることができますが、返されたペイロードにはログイン失敗メッセージがあります。

正常なログインの場合は200、悪いログインの場合は401または403が返されます。

0

を参照してください。あなたが動作するように、このために、次のMavenの依存関係を見ているかもしれません

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()); 
} 
} 

:クラスは最初のサーバの応答からPOJOオブジェクトであることに注意してください

<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

ようこそStackOverflowへ!あなたのコードを説明する努力をしてください、それは尋問者とコミュニティに役立ちます。 –