javaのHttpClientライブラリに問題があります。HttpClientでは403の応答がありますが、ブラウザでは応答しません。
対象のWebサイトはSSL(https://www.betcris.com)であり、そのサイトからインデックスページをロードできます。
しかし、さまざまなスポーツのオッズを示すさまざまなページは、HttpClientで403応答コードを返しますが、ブラウザで同じページを読み込むとうまく動作します。
ここにそのようなページ:https://www.betcris.com/en/live-lines/soccerがあります。
このページのトラブルシューティングは、HttpFox(LiveHttpHeadersに似たFirefoxアドオン)によって収集され、すべてのリクエストヘッダーとCookieが正しいことを確認していますが、HttpClientを使用して読み込むことができませんでした。私はまた、ブラウザ内のそのWebサイトのすべてのクッキーを削除してからページを直接読み込んで読み込むことができるので、クッキーは問題とは関係がないと判断しました。
私は、http://www.therightapi.com/testのオンラインツールを使用して、これらのページで特別なことが起こっていることを確認しました。このツールを使用すると、任意のリクエストヘッダーとともにページのURLを入力し、ターゲットWebサイトから得た応答を表示することができます。このツールを使用してhttps://www.google.comをロードすることはできますが、https://www.betcris.com/en/live-lines/soccerをロードしようとすると同じ403エラーが発生します。
は、ここにtherightapiで私の設定です:
と応答:
誰もがここで何が起こっているか知っていますか?
ありがとうございました。
編集:私はここにあなたがあなたのポンポンを持っている必要がありますMavenの依存関係が続いJavaコードは、だ、テストプロジェクトを作成しました:認証要件を通知するために使用される
package com.yourpackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
public class TestHttpClient {
public static void main(String[] args) {
String url = "https://www.betcris.com/en/live-lines/soccer";
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
// add request header
request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0");
try {
HttpResponse response = client.execute(request);
System.out.println("Response Code : "
+ response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
私はそれを理解しています。私が理解していないことは、すべてのCookieとキャッシュがクリアされたブラウザが、どのような認証なしでそのWebページにアクセスできるかです。 – user1646686
@ user1646686:認証はCookieやキャッシュに依存しません。 – MSalters
あなたはそれを詳しく教えてください。HTTPを使った認証の理解は、ユーザーがサーバーにユーザー名とパスワードを提供し、ユーザー名とパスワードが確認されたらサーバーがセッションを作成してから、このクッキーは、その時点からそのサーバーへの呼び出しで返され、サーバーはクッキー内の情報をセッションに一致させることができます。資格情報を提供せずに問題のURLにアクセスすると、どのような認証が行われているのか分かりません。 – user1646686