0

ウィキペディア API を使用してウィキペディアからデータを取得していますが、コードとエラーを投稿するとエラーが発生します。私を助けてください。

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;
}

これが私のエラーです:

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: 
4

1 に答える 1

2

ウィキペディアにアクセスするには (API を使用するかどうかに関係なく)、リクエストにUser-Agentを設定する必要があります。これは、ウィキメディアの User-Agent ポリシーによるものです。

User-Agent ヘッダーに何を設定しますか? 上記のリンク先のポリシー ページを引用します。

スクリプトでは、連絡先情報を含む有益な User-Agent 文字列を使用する必要があります。そうしないと、予告なしに IP ブロックされる場合があります。

ヘッダーを設定するには?リクエスト オブジェクトでプロパティを使用します。UserAgent

ちなみに、このような単純なリクエストの場合は、WebClientメソッドを使用する方が簡単DownloadString()です。

于 2012-01-25T19:21:18.110 に答える