c# - 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 */
解决方案
很高兴看到您加入了 StackOverflow!
现在,发生 403 错误通常与代码中的语法错误无关,而是与从 Google 服务器收到的响应有关。
现在,特别是 Google 对您每天可以进行多少 API 调用非常严格(Google 从为大量 API 调用付费的开发人员那里赚了很多钱)。此页面包含限制。如果你赚的比这里的数字多,这就是你得到错误的原因,你必须等到明天。请记住不要发送太多 http 请求并意外 DOS 它们,因为他们会为此将您列入黑名单。
确保您没有缓存他们的页面或在本地存储 js 脚本,因为这也会导致黑名单。
确保你使用https:
而不是http:
在这里。
推荐阅读
- r - 将 group_modify 与选定的列一起使用(保留整个数据框和顺序)
- google-apps-script - Google Sheets to Slack 无法更新同一块
- r - 如何将字符串转换为R中的可执行代码?
- c++ - 代码卡在循环中(但循环本身不会继续进行)。C++ 字符串
- c - 自动内存分配发生在 C 的编译时或运行时?
- python - Python Ray 共享内存访问
- snakemake - 使用 snakemake touch 使用 bwa 和 gatk 创建参考基因组索引
- angular - 如何使用动态数组创建 rxJS 订阅?
- java - JAVA中的原始函数
- ios - 如何在 swift 5 中使用 Alamofire multipartFormData 连同图像一起发送数据