2012-05-20 84 views
-1

运行这段代码时,我得到了以下错误:“HttpWebRequest的无效的URI URI为空”C#HttpWebRequest的无效URI

CookieContainer cookieContainer = new CookieContainer(); 
HttpWebRequest PreRequest = (HttpWebRequest)WebRequest.Create("https://www.google.com/accounts/ServiceLogin?utm_source=/places&utm_medium=van&utm_campaign=en&continue=http://www.google.com/local/add/businessCenter%3Fservice%3Dlbc%26gl%3DUS%26hl%3Den-US&service=lbc&hl=en-US&gl=US"); 
PreRequest.CookieContainer = cookieContainer; 
PreRequest.AllowAutoRedirect = true; 
HttpWebResponse PreResponse = (HttpWebResponse)PreRequest.GetResponse(); 
Stream PreResponseStream = PreResponse.GetResponseStream(); 
PreResponse.Cookies = PreRequest.CookieContainer.GetCookies(PreRequest.RequestUri); 
Encoding PreEnc = System.Text.Encoding.UTF8; 
StreamReader PreResponseStreamReader = new StreamReader(PreResponse.GetResponseStream(), PreEnc, true); 
String PreMyHTML = PreResponseStreamReader.ReadToEnd(); 

String Pattern = "name=\"GALX\"[\\s]*value=\"([a-zA-Z0-9-_\\.]*)\""; 
Match MyMatch = Regex.Match(PreMyHTML, Pattern); 
String GALX = MyMatch.Groups[1].ToString(); 

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://www.google.com/accounts/ServiceLoginAuth?service=lbc&ltmpl=sso&continue=http%3A%2F%2Fwww.google.com%2Flocal%2Fadd%2FbusinessCenter%3Fservice%3Dlbc%26gl%3DUS%26hl%3Den-US&service=lbc&uilel=3&ltmpl=sso&hl=en_US&ltmpl=sso&GALX=" + GALX + "&Email=" + user + "&Passwd=YOURACCOUNTPASSWORD&rmShown=1&signIn=Sign+in&asts="); 
Request.CookieContainer = cookieContainer; 
Request.Method = "POST"; 
Request.Referer = "https://www.google.com/accounts/ServiceLogin?utm_source=/places&utm_medium=van&utm_campaign=en&continue=http://www.google.com/local/add/businessCenter%3Fservice%3Dlbc%26gl%3DUS%26hl%3Den-US&service=lbc&hl=en-US&gl=US"; 
Request.MaximumAutomaticRedirections = 50; 
Request.AllowAutoRedirect = true; 
Request.KeepAlive = true; 
Request.ContentLength = 0; 

// Get the response 
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); 

Stream ResponseStream = Response.GetResponseStream(); 
Response.Cookies = Request.CookieContainer.GetCookies(Request.RequestUri); 

// Read the response from the stream 
Encoding Enc = System.Text.Encoding.UTF8; 
StreamReader ResponseStreamReader = new StreamReader(Response.GetResponseStream(), Enc, true); 

String MyHTML = ResponseStreamReader.ReadToEnd(); 
//textBox2.Text = MyHTML; 

String Pattern2 = "location\\.replace\\(\"(http:\\/\\/www\\.youtube\\.com\\/signin[a-zA-Z0-9\\\\\\?\\%_-]*)\"\\)"; 
Match MyMatch2 = Regex.Match(MyHTML, Pattern2); 
String YTRedirect = MyMatch2.Groups[1].ToString(); 
String Temp = YTRedirect.Replace("\\x3d", "="); 
String Temp2 = Temp.Replace("\\x26", "&"); 
YTRedirect = Temp2; 

HttpWebRequest PosterRequest = (HttpWebRequest)WebRequest.Create(YTRedirect); 
PosterRequest.CookieContainer = cookieContainer; 
PosterRequest.Method = "GET"; 
HttpWebResponse PosterResponse = (HttpWebResponse)PosterRequest.GetResponse(); 
Stream PosterResponseStream = PosterResponse.GetResponseStream(); 
PosterResponse.Cookies = PosterRequest.CookieContainer.GetCookies(PosterRequest.RequestUri); 
Encoding PosterEnc = System.Text.Encoding.UTF8; 
StreamReader PosterResponseStreamReader = new StreamReader(PosterResponse.GetResponseStream(), PosterEnc, true); 
String PosterMyHTML = PosterResponseStreamReader.ReadToEnd(); 

HttpWebRequest PostestRequest = (HttpWebRequest)WebRequest.Create(textBox4.Text); 
PostestRequest.CookieContainer = cookieContainer; 
PostestRequest.Method = "GET"; 
HttpWebResponse PostestResponse = (HttpWebResponse)PostestRequest.GetResponse(); 
Stream PostestResponseStream = PostestResponse.GetResponseStream(); 
PostestResponse.Cookies = PostestRequest.CookieContainer.GetCookies(PostestRequest.RequestUri); 
Encoding PostestEnc = System.Text.Encoding.UTF8; 
StreamReader PostestResponseStreamReader = new StreamReader(PostestResponse.GetResponseStream(), PostestEnc, true); 
String PostestMyHTML = PostestResponseStreamReader.ReadToEnd(); 

我试图登录并查看视频,这也将是有趣的,看看一种方式来赞许或留下评论,帮助赞赏!编辑:错误发生在HttpWebRequest PosterRequest =(HttpWebRequest)WebRequest.Create(YTRedirect);

+1

这是很多代码,几乎没有任何有关错误的信息。当然,你可以通过一些堆栈跟踪来缩小范围吗? – spender

回答

0

这是一个有点硬从代码告诉,但也许仔细检查中包含什么textBox4.Text

HttpWebRequest PostestRequest = (HttpWebRequest)WebRequest.Create(textBox4.Text);

在黑暗中只是一个拍没有堆栈跟踪。

+0

完整的视频网址就在那里 – Madmadmax

0

我还没有读过任何代码,但从它听起来像确保在URL前加入'http://'。