次のコードを使用してNew York Timesページのhtmlを取得していますが、残念ながらnullが返されます。私は他のウェブサイト(CNN、The Guardianなど)で試してみて、うまく動作します。私はGoogle App EngineからURLFetchServiceを使用しています。GAFを使用するURLFetchServiceは、New York Timesページを取得しようとするとnullを返します。
ここにコードスニペットがあります。何が間違っているのか教えてください。
//url = https://www.nytimes.com/2017/05/02/us/politics/health-care-paul-ryan-fred-upton-congress.html
private String extractFromUrl(String url, boolean forced) throws java.io.IOException, org.xml.sax.SAXException,
de.l3s.boilerpipe.BoilerpipeProcessingException {
Future<HTTPResponse> urlFuture = getMultiResponse(url);
HTTPResponse urlResponse = null;
try {
urlResponse = urlFuture.get(); // Returns null here
} catch (InterruptedException ie) {
ie.printStackTrace();
} catch (ExecutionException ee) {
ee.printStackTrace();
}
String urlResponseString = new String(urlResponse.getContent());
return urlResponseString;
}
public Future<HTTPResponse> getMultiResponse(String website) {
URLFetchService fetcher = URLFetchServiceFactory.getURLFetchService();
URL url = null;
try {
url = new URL(website);
} catch (MalformedURLException e) {
e.printStackTrace();
}
FetchOptions fetchOptions = FetchOptions.Builder.followRedirects();
HTTPRequest request = new HTTPRequest(url, HTTPMethod.GET, fetchOptions);
Future<HTTPResponse> futureResponse = fetcher.fetchAsync(request);
return futureResponse;
}
私は取得しています例外がこれです:カールの詳細な出力を見ると
java.util.concurrent.ExecutionException: java.io.IOException: Could not fetch URL: https://www.nytimes.com/2017/05/02/us/politics/health-care-paul-ryan-fred-upton-congress.html, error: Received exception executing http method GET against URL https://www.nytimes.com/2017/05/02/us/politics/health-care-paul-ryan-fred-upton-congress.html: null
[INFO] at com.google.appengine.api.utils.FutureWrapper.setExceptionResult(FutureWrapper.java:66)
[INFO] at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:97)
[INFO] at main.java.com.myapp.app.MyServlet.extractFromUrl(MyServlet.java:10)
ありがとうございました。私はそれらの提案を見上げます。 – BlueChips23
最後にあなたの提案を調べて、自分のコードが動作するようにしました。最初のリクエストでクッキーを設定した後、別のページにリダイレクトされ、さらに2つのクッキーが設定されます。その後、3つのCookie(1つは第1の要求、もう1つはリダイレクトの2番目の要求)が使用されている元のページにリダイレクトされます。 – BlueChips23
@ BlueChips23恐ろしい!この動作が再び変わる可能性が高いので、ログオフとエラー処理が適切に行われていることを確認してください。 – alpeware