1

次のコードを使用してeBayアカウントにログインしようとしています。

string signInURL = "https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerid=2&siteid=0&UsingSSL=1";
string postData = String.Format("MfcISAPICommand=SignInWelcome&userid={0}&pass={1}", "username", "password");
string contentType = "application/x-www-form-urlencoded";
string method = "POST";
string userAgent = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)";

CookieContainer cookieContainer = new CookieContainer();

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(signInURL);
req.CookieContainer = cookieContainer;
req.Method = method;
req.ContentType = contentType;
req.UserAgent = userAgent;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] loginDataBytes = encoding.GetBytes(postData);
req.ContentLength = loginDataBytes.Length;
Stream stream = req.GetRequestStream();
stream.Write(loginDataBytes, 0, loginDataBytes.Length);
stream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader xsr = new StreamReader(res.GetResponseStream());
String responseText = xsr.ReadToEnd();

明らかに、私の実際のユーザー名とパスワードを置き換えます。文字列responseTextを見ると、eBayからの応答の一部が

使用しているブラウザがCookieを拒否しています。

私が間違っていることについて何か考えはありますか?

PSはい、私もeBay APIを使用していますが、これはAPIでやりたいこととは少し異なるものです。

4

3 に答える 3

1

あなたは直接のhttpリクエストを行っています。Ebay サイトには、ブラウザーと対話する機能があります (おそらくセッション Cookie を保存するため)。リクエスト コードを十分にスマートにして Cookie を正しく使用しない限り、機能しません。おそらく、代わりに Internet Explorer オブジェクトを使用する必要があります。

于 2009-08-31T17:55:25.873 に答える
1

POST を実行する前に、コードで送信するフォームを含むページをダウンロードし、提供された Cookie をCookieContainer取得して (パスが正しいことを確認して) リクエストに投稿する必要があります。

明確にするために、正しいデータを POST している可能性がありますが、それに付随する必要がある Cookie を送信していません。この Cookie はログイン ページから取得されます。

于 2011-05-30T05:35:01.187 に答える
0

何が起こったのかを正確に確認するには、http トラフィックを傍受する必要があります。私は Fiddler2 を使用しています。これは、http をデバッグするための優れたツールです。したがって、自分のアプリケーションとリモート Web サーバーのどちらが間違っているかを知ることができます。

フィドラーを使用すると、リクエスト ヘッダー、Cookie を含むレスポンス ヘッダー、およびレスポンス コンテンツを確認できます。あなたのアプリとEbayの中間で使用されます。

私の経験に基づいています。あなたに送信された Ebay の Cookie が Ebay のサーバーに送り返されていないためだと思います。Fiddler は、イエスかどうかを証明します。

もう1つ、受け取った応答Cookieは、同じCookieContainerを使用して次の要求に送り返す必要があります。

CookieContainer には .Add(Cookie) および .GetCookies(uri) メソッドにバグがあることに注意してください。使用しない場合もありますが、内部コードで使用される場合があります。

詳細を確認し、ここで修正してください。

http://dot-net-expertise.blogspot.com/2009/10/cookiecontainer-domain-handling-bug-fix.html

CallMeLaNN

于 2009-10-08T14:18:57.070 に答える