首页 > 解决方案 > request.getResponse() 出现错误

问题描述

这是我的代码,它在我朋友的 PC 上返回预期的输出,但不是在我的 PC 上。

我们都在与 Visual Studio 2017 社区合作:

在此处输入图像描述

这是将返回输入地址的纬度和经度的代码:

[在此处输入图片描述][2]

第一次工作正常,但之后抛出(403禁止错误!!!/主要问题出在request.getResponse()上)

    private static String[] x = new String[3];

    public static String[] GetFirstLastName(string address)
    {
        try { 
        string url = "http://maps.google.com/maps/api/geocode/xml?address=" + address + "&sensor=false";

        WebRequest request = WebRequest.Create(url);
        // request.UseDefaultCredentials = true;
        // request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        // request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        using (WebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                var ds = new DataSet("Employee");
                ds.ReadXml(reader);

                DataRow dr = null;

                var dt = new DataTable("Employee");
                dt.Columns.AddRange(new DataColumn[2]
                    {
                        new DataColumn("Latitude", typeof (string)),
                        new DataColumn("Longitude", typeof (string))
                    });

                int i = 0;

                try
                {
                    foreach (DataRow row in ds.Tables["result"].Rows)
                    {
                    }
                }
                catch (Exception e)
                {
                   Console.WriteLine(e.ToString());
                   return x;
                }

                foreach (DataRow row in ds.Tables["result"].Rows)
                {
                    if (i == 0)
                    {
                        string geometry_id = ds.Tables["geometry"].Select("result_id = " + row["result_id"])[0]["geometry_id"].ToString();

                        dr = ds.Tables["location"].Select("geometry_id = " + geometry_id)[0];

                        dt.Rows.Add(dr["lat"], dr["lng"]);

                        //  Console.WriteLine(dr["lat"].ToString() + " " + dr["lng"].ToString());
                        i = 1;
                        break;
                    }
                }

                x[0] = dr["lat"].ToString();
                x[1] = dr["lng"].ToString();

                reader.Close();
            }

            // request.Timeout = 0;
            // request.Abort();
            response.Close();
            return x;
        }
    }
    catch(Exception e)
    {
        Console.WriteLine(e);
        x[0] = "";
        x[1] = "";
        return x;
    }
}

public static String[] GetFirstLastName1(string address)
{
        try
        {
            string url = "http://maps.google.com/maps/api/geocode/xml?address=" + address + "&sensor=false";
            WebRequest request = WebRequest.Create(url);
            //  request.UseDefaultCredentials = true;
            // request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
            //   request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
            using (WebResponse response = request.GetResponse())
            {
                using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    var ds = new DataSet("Employee");
                    ds.ReadXml(reader);

                    DataRow dr = null;

                    var dt = new DataTable("Employee");
                    dt.Columns.AddRange(new DataColumn[2]
                    {
                new DataColumn("Latitude", typeof (string)),
                new DataColumn("Longitude", typeof (string))
                    });

                    int i = 0;

                    try
                    {
                        foreach (DataRow row in ds.Tables["result"].Rows)
                        {

                        }


                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());

                        return x;
                    }

                    foreach (DataRow row in ds.Tables["result"].Rows)
                    {
                        if (i == 0)
                        {
                            string geometry_id = ds.Tables["geometry"].Select("result_id = " + row["result_id"])[0]["geometry_id"].ToString();

                            dr = ds.Tables["location"].Select("geometry_id = " + geometry_id)[0];

                            dt.Rows.Add(dr["lat"], dr["lng"]);

                            //  Console.WriteLine(dr["lat"].ToString() + " " + dr["lng"].ToString());
                            i = 1;
                            break;
                        }
                    }
                    x[0] = dr["lat"].ToString();
                    x[1] = dr["lng"].ToString();
                    reader.Close();
                }
                //// request.Timeout = 0;
                ///   request.Abort();
                response.Close();
                return x;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            x[0] = "";
            x[1] = "";
            return x;
        }

    }
    static void Main(string[] args)
    {

        int i = 0;

        for (;;)
        {
            String x = Console.ReadLine();
            if (i == 0)
            {
                String[] y = GetFirstLastName(x);

                Console.WriteLine(y[0] + " " + y[1]);
            }
            else
            {
                String[] y = GetFirstLastName1(x);

                Console.WriteLine(y[0] + " " + y[1]);
            }

            i++;
        }
        //Console.ReadKey();
    }
}

}

/*(上面的代码相同)

enter code here

///我的朋友输出 /// 我的输出 [2]: https://i.stack.imgur.com/qeDcz.png */

标签: c#

解决方案


很高兴看到您加入了 StackOverflow!

现在,发生 403 错误通常与代码中的语法错误无关,而是与从 Google 服务器收到的响应有关。

现在,特别是 Google 对您每天可以进行多少 API 调用非常严格(Google 从为大量 API 调用付费的开发人员那里赚了很多钱)。此页面包含限制。如果你赚的比这里的数字多,这就是你得到错误的原因,你必须等到明天。请记住不要发送太多 http 请求并意外 DOS 它们,因为他们会为此将您列入黑名单。

确保您没有缓存他们的页面或在本地存储 js 脚本,因为这也会导致黑名单。

确保你使用https:而不是http:在这里。


推荐阅读