2012-01-25 3 views
0

위키 피 디아 api를 사용하여 wiki pedia에서 데이터를 가져 오지만 여기서 오류가 발생합니다. 내 코드와 오류가 게시됩니다. 도와주세요.wikipedia api 사용시 오류가 발생했습니다.

System.Net.WebException was unhandled by user code 
    Message=The remote server returned an error: (403) Forbidden. 
    Source=System 
    StackTrace: 
     at System.Net.HttpWebRequest.GetResponse() 
     at _Default.btnsearch_Click(Object sender, EventArgs e) in c:\Users\Imran Ali\Desktop\Wikipedia\Default.aspx.cs:line 33 
     at System.Web.UI.WebControls.Button.OnClick(EventArgs e) 
     at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 
     at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
     at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
     at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 
+0

서버에서 오류 페이지의 * 텍스트 *도 반환합니까? 그 이유는 403을 얻는 이유를 말할 수 있습니다. 동일한 API 요청을하는 403을 얻지 못하므로 IP를 차단했을 수 있습니다. –

답변

2

은 위키 백과 (API를 사용 여부), 당신이 요청에 User-Agent을 설정해야 액세스하려면 :

HttpWebRequest myRequest = 
    (HttpWebRequest)WebRequest.Create("http://en.wikipedia.org/w/api.php?action=opensearch&format=xml&search=hello"); 
System.Net.ServicePointManager.Expect100Continue = false; 

using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse()) 
{ 
    string ResponseText; 
    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
    { 
     ResponseText = reader.ReadToEnd(); 
    } 

    lblresult.Text = ResponseText; 
} 

여기 내 오류입니다. 이는 Wikimedia's User-Agent policy 때문입니다.

User-Agent 헤더를 어떻게 설정합니까? 위에 링크 된 정책 페이지 인용 :

Scripts should use an informative User-Agent string with contact information, or they may be IP-blocked without notice.

헤더를 설정하는 방법은 무엇입니까? 요청 개체에 the UserAgent property을 사용하십시오.

이와 같은 간단한 요청의 경우 WebClient 메서드를 사용하는 것이 더 쉽습니다 (예 : DownloadString()).

관련 문제