2013-08-18 4 views
2

WebBrowser 컨트롤의 오버로드 "탐색"메서드를 사용한 후 응답 데이터를 얻을 수있는 방법을 알고 싶습니다. 여기에 내가 뭐하는 거지의 예입니다 : 이것은 첫 번째 매개 변수에 내 페이지를 탐색한다WebBrowser 컨트롤을 사용하여 응답 데이터가 POST 데이터를 보내지 못하게하려면 어떻게해야합니까?

wb.Navigate("https://live.xbox.com/en-US/Friends/List", "", Encoding.ASCII.GetBytes(post), "Content-Type: application/x-www-form-urlencoded\r\n"); 

는하지만 어떻게 그냥이를 호출 응답 데이터를 얻는 방법 아무 생각이 없습니다. 또한 내가 원하는 결과는 응답의 본문입니다. 누군가 나를 도와주세요. WebRequest 및 WebResponse 방법을 사용해 보았지만 어떤 이유로 든 Xbox Live 웹 사이트에 로그인 할 수 없기 때문에 아무 것도 할 수없고 411 개의 오류가 발생합니다. WebBrowser를 사용하여이 작업을 수행 할 수 있기를 원합니다. 그러나 내가 할 수 없다면 어떤 도움이라도 대단히 감사 할 것입니다.

답변

-1

사용하여 시도해보십시오 대신 WebBrowser 컨트롤의 System.Net.HttpWebRequest :

try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://website.com/service"); 
      request.Method = "GET"; 
      StringBuilder data = new StringBuilder(); 
      try 
      { 
       using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
       { 
        StreamReader reader = new StreamReader(response.GetResponseStream()); 
        return reader.ReadToEnd(); 
       } 
      } 
      catch (WebException ex) 
      { 
       WebResponse errorResponse = ex.Response; 
       using (Stream responseStream = errorResponse.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
        String errorText = reader.ReadToEnd(); 
       } 
       throw; 
      } 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

이 꽤 자기 explainatory해야하지만, 코드를 사용하여 원격 웹 서버에 요청을 생성합니다 요약 HTTP GET 명령 그러면 응답을 응용 프로그램 (콘솔/winform/서비스 등)에서 구문 분석하여 사용할 수 있습니다.

희망이 도움이됩니다. 당신은 등 가짜 웹 클릭 이벤트를 사용하여 로그인 WebBrowser 컨트롤을 사용할 수 있습니다

0

은 (이미 이런 짓을 한 것 같다 +1)

다음

당신은 더 많은 제정신 물건을 할 WebRequest 클래스로 웹 브라우저 컨트롤에서 쿠키를 전송할 수 있습니다 . 또한 나중에 너무

using System; 
using System.Net; 
using System.Runtime.InteropServices; 
using System.Text; 

namespace Sample.Helpers { 
    public class NativeMethods { 
     public static CookieContainer GetUriCookieContainer(Uri uri) { 
      CookieContainer cookies = null; 
      int datasize = 8192 * 16; // Determine the size of the cookie 
      StringBuilder cookieData = new StringBuilder(datasize); 
      if (!InternetGetCookieEx(uri.ToString(), null, cookieData, ref datasize, InternetCookieHttponly, IntPtr.Zero)) { 
       if (datasize < 0) 
        return null; 
       cookieData = new StringBuilder(datasize); // Allocate stringbuilder large enough to hold the cookie 
       if (!InternetGetCookieEx(
        uri.ToString(), 
        null, cookieData, 
        ref datasize, 
        InternetCookieHttponly, 
        IntPtr.Zero)) 
        return null; 
      } 
      if (cookieData.Length > 0) { 
       cookies = new CookieContainer(); 
       cookies.SetCookies(uri, cookieData.ToString().Replace(';', ',')); 
      } 
      return cookies; 
     } 
     [DllImport("wininet.dll", CharSet = CharSet.Unicode, SetLastError = true, ThrowOnUnmappableChar = true)] 
     private static extern bool InternetGetCookieEx(string url, string cookieName, StringBuilder cookieData, ref int size, Int32 dwFlags, IntPtr lpReserved); 
     private const Int32 InternetCookieHttponly = 0x2000; 

    } 
} 

사용 예제

var webRequest = (HttpWebRequest)WebRequest.Create(url); 
webRequest.CookieContainer = Cookies; 
//webRequest.Headers.Add(HeaderCollection); 
webRequest.Timeout = 10000; 
//webRequest.UserAgent = UserAgent; 
webRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; 
webRequest.Method = "POST"; 
byte[] postBytes; 
if (postDataRaw != null) { 
    postBytes = Encoding.UTF8.GetBytes(postDataRaw); 
} 
webRequest.ContentLength = postBytes.Length; 
using (var dataStream = webRequest.GetRequestStream()) { 
    dataStream.Write(postBytes, 0, postBytes.Length); 
} 
using (var response = webRequest.GetResponse()) { 
    var result = ((HttpWebResponse)response).StatusCode; 
    using (var responseStream = response.GetResponseStream()) { 
     using (var streamReader = new StreamReader(responseStream)) { 
      return streamReader.ReadToEnd(); 
     } 
    } 
} 
쿠키를 캐시 할 수 있습니다