request.getResponse()出现错误

时间:2018-08-25 05:05:10

标签: c#

这是我的代码,正在我朋友的PC上返回预期的输出,而在我的PC上却未返回。

我们都在使用Visual Studio 2017社区:

enter image description here

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

[在此处输入图片描述] [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 * /

1 个答案:

答案 0 :(得分:0)

很高兴看到您加入了StackOverflow!

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

现在,特别是Google每天限制您可以进行多少次API调用(Google为要支付大量API调用的开发人员赚了很多钱)。 This page contains the limits.如果您的收入超出了此处的数字,这就是为什么您会收到错误消息,而必须等到明天。请记住不要发送太多的HTTP请求并意外地对它们进行DOS,因为它们会为此将您列入黑名单。

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

请确保您在此处使用https:而不是http: