我想用C#登錄到我的eBay帳戶。我看過各種帖子,並找到以下3個選項。不幸的是,他們都沒有工作。我還列出了我獲得的響應標頭值以及Fiddler在進行登錄時顯示的值。有一個區別,因爲我只有一個「Set-Cookie」值,Fiddler顯示10個「Set-Cookie」值。我哪裏錯了?另外,爲什麼我只能得到一個「Set-Cookie」值?非常感謝任何人都可以分享工作解決方案。這裏是我試過的3個選項:用C登錄Ebay#
string userName = "myUserName";
string password = "myPassword";
string myEbayUrl = "http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1";
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)";
string pageSource;
CookieContainer cookieContainer = new CookieContainer();
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
//OPTION 1
Debug.WriteLine("OPTION 1:");
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(signInUrl);
req.CookieContainer = cookieContainer;
req.Method = method;
req.ContentType = contentType;
req.UserAgent = userAgent;
req.Proxy = proxy;
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();
//login
HttpWebResponse signInRes = (HttpWebResponse)req.GetResponse();
//loop through header items
foreach (var item in signInRes.Headers.AllKeys)
{
Debug.WriteLine(item + " : " + signInRes.Headers[item.ToString()]);
}
HttpWebRequest myEbayReq = (HttpWebRequest)HttpWebRequest.Create(myEbayUrl);
myEbayReq.CookieContainer = cookieContainer;
myEbayReq.Method = method;
myEbayReq.ContentType = contentType;
myEbayReq.UserAgent = userAgent;
myEbayReq.AllowAutoRedirect = false;
myEbayReq.Proxy = proxy;
//get MyEbay page behind login
using (StreamReader sr = new StreamReader(myEbayReq.GetResponse().GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
savePage(pageSource, "option1");
//OPTION 2 without cookiecontainer
Debug.WriteLine("OPTION 2:");
string cookieHeader;
WebRequest request = WebRequest.Create(signInUrl);
request.ContentType = contentType;
request.Method = method;
request.Proxy = proxy;
byte[] bytes = Encoding.ASCII.GetBytes(postData);
request.ContentLength = bytes.Length;
using (Stream os = request.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
//login
WebResponse loginResp = request.GetResponse();
cookieHeader = loginResp.Headers["Set-cookie"];
//loop through header items
foreach (var item in loginResp.Headers.AllKeys)
{
Debug.WriteLine(item + " : " + loginResp.Headers[item.ToString()]);
}
//get MyEbay page behind login
WebRequest getRequest = WebRequest.Create(myEbayUrl);
getRequest.Proxy = proxy;
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
savePage(pageSource, "option2");
//OPTION 3 using derived web client class
Debug.WriteLine("OPTION 3:");
using (var client = new LoginWebClient())
{
client.Proxy = proxy;
var values = new NameValueCollection
{
{ "userid", userName },
{ "pass", password },
};
// login
client.UploadValues(signInUrl, values);
//loop through header items
foreach (var item in client.ResponseHeaders.AllKeys)
{
Debug.WriteLine(item +" : "+client.ResponseHeaders[item.ToString()]);
}
//get MyEbay page behind login
pageSource = client.DownloadString(myEbayUrl);
}
savePage(pageSource,"option3");
派生的Web客戶端類:
public class LoginWebClient : WebClient
{
public CookieContainer CookieContainer { get; private set; }
public LoginWebClient()
{
CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = CookieContainer;
}
return request;
}
}
這裏有響應報頭值,我得到:
選項1:
Set-Cookie: ebay =%5Esbf%3D%23%5E;域= .ebay.com;路徑= /,DP1 = BPBF /%2344e96da9a^U1P/QEBfX0BAX19AQA ** 4e96da9a ^;域= .ebay.com;到期日= 2012年10月12日星期五12:33:30 GMT;路徑= /,CSSG = a594ba2b12b0a040b12546d5ffc24e56;域= .ebay.com;路徑=/S = CgAD4ACBMtviaYTU5NGJhMmIxMmIwYTA0MGIxMjU0NmQ1ZmZjMjRlNTblRK7X;域= .ebay.com;路徑= /;僅Http,非會話= CgADKACBWG6iaYTU5NGJhMmIxMmIwYTA0MGIxMjU0NmQ1ZmZjMjRlNTYAywABTLWuIjE5937t;域= .ebay.com;到期= 2011年10月13日星期四12:33:30 GMT;路徑=/ 服務器:Apache-狼/ 1.1 緩存控制:私人 雜注:無緩存 的Content-Type:text/html的;字符集= UTF-8 內容長度:16980 日期:週三,10月13日2010 12時33分30秒GMT
選項2:
的Set-Cookie:易趣=%5Esbf%3D%23%5E;域= .ebay.com;路徑= /,DP1 = BPBF /%2344e96da9d^U1P/QEBfX0BAX19AQA ** 4e96da9d ^;域= .ebay.com;到期日= 2012年10月12日星期五12:33:33 GMT;路徑= /,CSSG = a594c8cf12b0a02662265926ffc9c4a3;域= .ebay.com;路徑= /,S = CgAD4ACBMtvidYTU5NGM4Y2YxMmIwYTAyNjYyMjY1OTI2ZmZjOWM0YTM4WWlH;域= .ebay.com;路徑= /,非會話= CgADKACBWG6idYTU5NGM4Y2YxMmIwYTAyNjYyMjY1OTI2ZmZjOWM0YTMAywABTLWuJTFk6RbF;域= .ebay.com;到期= 2011年10月13日星期四12:33:33 GMT;路徑=/ 服務器:Apache-狼/ 1.1 緩存控制:私人 雜注:無緩存 的Content-Type:text/html的;字符集= UTF-8 內容長度:16979 日期:週三,10月13日2010 GMT 12時33分32秒
OPTION 3:
連接:保持活動 代理連接:保持活動 的Content-Length:8154 的Content-Type:text/html的 日期:週三,10月13日2010 12:33:37 GMT ETag:cd78002149191b683d4d0b3c98f6d5e3 Last-Modified:Wed,13 Oct 2010 11:55:34 GMT 服務器:Apache-狼/ 1.1 途經:1.1 SATURN
而這裏是響應頭的值即表示的Fiddler:
的Set-Cookie: DS1 = ATS/1286972903913;域= .ebay.com; Path =/
Set-Cookie: ds2 = alss/0.4cb6f76c ^;域= .ebay.com; Path =/
Set-Cookie: ebay =%5Elrtjs%3D2。6%5EsfLMD%3D0%5Esbf%3D%23a0000000004%5Ecos%3D-7%5Ecv%3D15555%5Elvmn%3D0%7C0%7C%5Esin%3Din%5Ejs%3D1%5E;域= .ebay.com;路徑=/
的Set-Cookie: DP1 = bvrvi/3%7C0%7C250707265333%7C250707988126%7C250707990497%7C4cc2d4ec^PCID/1578961514e96d96c^A1P/04cb6f76c^FM/4.3.24cdbe2b3^MPC/0%7C04cc2d4ec^PBF /% 23180c20000044e96d96c^TZO/-784cb5b3fc^U1P/ZXF1aW5veDIwMTI * 4e96d96c^IDM/14cb83979^U1F/Ewald4e96d96c ^;域= .ebay.com;到期日= 2012年10月12日星期五12:28:28 GMT;路徑=/
的Set-Cookie: NS1 = BAQAAASuJIxIvAAaAANgAXk6W2WxmMDAwYzg2fDYwMV4xMjg2ODg2ODY3MTQ4XmMybHlMbkp2ZEdoelkyaHBiR1E9XjFeM3wyfDY1fDV8NHw3XjFeMl40XjJeMTJeMTJeMl4xXjFeMF4xXjBeMV44MTMxAKUAGE6W2Ww2NzQ2MTc1Mi8wOzEwMjU4MTk5NjkvMDtugrDk7fid3JLf0Q9Jz19v95p6vg * ;域= .ebay.com;過期=星期四,10月13日12時28分28秒2011 GMT;路徑= /; HttpOnly
Set-Cookie: cssg = a4e34c0312b0a02694e761b7fff52ae9;域= .ebay.com;路徑=/
的Set-Cookie: S = BAQAAASuJIxIvAAWAAAEAC0y292hlcXVpbm94MjAxMgASAApMtvdsdGVzdENvb2tpZQADAAVMtvdsMTYzODQA9AAiTLb3bCQyJGFQOVp0bEMzJEF3V1pTamRvVTFGYW0zdGI1aC9WZjEBRQAITpbZbDRjOTlkN2Y0AAYAAUy292wwAPgAIEy292xhNGUzNGMwMzEyYjBhMDI2OTRlNzYxYjdmZmY1MmFlOQCoAAFMtvdoMQFKABdMtvdsNGNiNWE1ZTguMC4xLjIuNDEuMS4wLjMADAAKTLb3bDEwMjU4MTk5NjkAPQALTLb3bGVxdWlub3gyMDEyAO4AwUy292wzBmh0dHA6Ly9jb2lucy5zaG9wLmViYXkuY29tL1NvdXRoLUFmcmljYS0vNDgwMjUvaS5odG1sP190cmtwYXJtcz02NSUyNTNBMTIlMjU3QzY2JTI1M0EyJTI1N0MzOSUyNTNBMSUyNTdDNzIlMjUzQTQyMDMmcnQ9bmMmX2NhdHJlZj0xJl9zdGlja3k9MSZfdHJrc2lkPXAzMjg2LmMwLm0xNCZfc29wPTEmX3NjPTEjaXRlbTNhNWY1MTQ3MzUHs3TL8cV8G9bXdjQDn2O0YlX1cH0;域= .ebay.com;路徑= /;僅Http
的Set-Cookie:非會話= BAQAAASuJIxIvAAaAABAAC06W2WxlcXVpbm94MjAxMgAzAAhOltlsNjAwMSxaQUYA8wAiTpbZbCQyJGFQOVp0bEMzJEF3V1pTamRvVTFGYW0zdGI1aC9WZjEACAAcTN0y7DEyODY5NzI3OTh4MjUwNzA3MjY1MzMzeDB4MlkAygAgVhunbDc3MzFhYjlhMTJiMGEwMjY5YTExOTlmMWZmZjk1M2I0AMsAAky1rPQxNQFMABdOltlsNGNiNWE1ZWMuMC4xLjIuNDEuMi4wLjMAnAA4TpbZbG5ZK3NIWjJQckJtZGo2d1ZuWStzRVoyUHJBMmRqNkFFa29lcENabUxwd1dkajZ4OW5ZK3NlUT09AU0AF06W2Ww0Y2I1YTVlYy4wLjEuNS40OS4wLjAuMwCdAAhOltlsMDAwMDAwMDExPLRSShRUzdDU4YsYXFXG313H7A **;域= .ebay.com;到期= 2011年10月13日星期四12:28:28 GMT; Path =/
Set-Cookie: secses = BAQAAASuJIxIvAAaAAUsAF06W2Ww0Y2I1YTVlYy4wLjEuMi40MS4xLjAuMxdf9sPE5nmJj5E24Fy2hCJhKoHt;域= .ebay.com; Path =/
Set-Cookie: lucky9 = 6866724;域= .ebay.com;到期時間=週一,2015年10月12日12:28:28 GMT; Path =/
我不知道什麼是錯誤的。從你的代碼中,我看到你在完成它們之後並沒有正確地處理HttpWebResponse對象。你能先對你的響應對象調用close()嗎?其次,即使Ebay API不允許你做所有事情,但你仍然可以部分地使用它來完成登錄階段,然後嘗試看看你是否可以使用相同的底層連接訪問你的頁面? – feroze 2010-10-16 19:49:13