4

問題:

ローカルで私のアプリケーションは正常に動作します。私の HTTP GET はコード 200 と最終 URL を返します: http://vow.mlspin.com/clients/index.aspx ?

私のアプリケーションの残りの部分もうまく機能します。

コードを GAE サーバーにデプロイすると (デプロイには Eclipse プラグインを使用します)、間違った HTML ページが返されるため、アプリケーションが動作しなくなります。リターン コードは 200 のままですが、URL は現在 (最終 URL) です: http://vow.mlspin.com/clients/signin.aspx?id=

私の質問は:リダイレクトに問題はありますか? Google App Engine サーバーは何らかの形でブラックリストに登録されていますか? ここで何が間違っていますか?誰もこれに遭遇したことがありますか?

私が見つけた最も近い質問はこれでした: GAE Java からの Http GETこの提案を実装しましたが、これまでのところうまくいきませんでした。

よろしくお願いします!

追加情報 -> 以下は、まったく同じ GET 要求からの HTTPResponse ヘッダーです。1 つはローカル展開からのもので、もう 1 つは GAE 展開からのものです。

ローカル HTTP 応答ヘッダー

Date :: Tue, 24 Apr 2012 04:12:32 GMT
Server :: Microsoft-IIS/6.0
X-Powered-By :: ASP.NET
X-AspNet-Version :: 2.0.50727
P3P :: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
Cache-Control :: no-cache
Pragma :: no-cache
Expires :: -1
Content-Type :: text/html; charset=utf-8
Content-Length :: 133704

デプロイされた HTTP 応答ヘッダー

date :: Tue, 24 Apr 2012 04:11:19 GMT
server :: Microsoft-IIS/6.0
x-powered-by :: ASP.NET
x-aspnet-version :: 2.0.50727
p3p :: CP="NOI DSP COR NID ADMa OPTa OUR NOR"
cache-control :: private
content-type :: text/html; charset=utf-8
content-length :: 4991
x-google-cache-control :: remote-fetch
via :: HTTP/1.1 GWA

リクエストの作成方法:

まずは簡単な方法でやってみた

Document doc = Jsoup.connect(baseMLSURL).get();

それから私は低レベルに行き、ただJava.netを使用しようとしました

private String getHttpFromServer(String url) throws IOException
    log.severe("getting http from: "+ url);
    StringBuilder sb = new StringBuilder();
    URL yahoo = new URL(url);
    URLConnection yc = yahoo.openConnection();
    yc.setRequestProperty("Host", "vow.mlspin.com");
    yc.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");
    BufferedReader in = new BufferedReader(
                            new InputStreamReader(
                            yc.getInputStream()));
    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        sb.append(inputLine.replaceAll("&nbsp", " ")+"\r\n");
    }
    in.close();

    return sb.toString();
}

最後に、Google の URLFetcher も使用しようとしました

private String getHttpUsingFetchService(String url) throws MalformedURLException, IOException {
    URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService();
    HTTPResponse targetResponse = fetchService.fetch(new URL(url)); // Error
    log.severe("Code returned from request: "+targetResponse.getResponseCode());
    log.severe("final URL: "+targetResponse.getFinalUrl());
    String result = new String(targetResponse.getContent());
    return result.replaceAll(" ", " ");
}
4

2 に答える 2

5

数か月前にここで似たようなことがありました。最終的に謎だったのは、サイトが自分自身にリダイレクトされ、何らかの Cookie が返されることを予期していたということでした。しかし、urlfetch リダイレクト処理は、受信した Cookie を送信しません。ローカルで実行されているときの urlfetch エミュレーションは、Cookie で何か違うことをする可能性があります。

これが機能しない場合は、urlfetch でリダイレクト フォローをオフにして、リダイレクトと Cookie を自分で管理することをお勧めします。

于 2012-04-24T05:15:40.783 に答える
0

アクセスしようとしているサービスには認証が必要です。新しいブラウザまたはシークレット ウィンドウで最初に投稿した URL にアクセスしてみてください。2 番目の URL にリダイレクトされます。アプリを使用してサインイン手順を実行し、発行された Cookie を取得して、後続のすべての要求で送信する必要があります。

于 2012-04-24T00:38:20.403 に答える