【问题标题】:C# calling a webservice result in 401C# 调用 web 服务导致 401
【发布时间】:2020-01-11 07:33:39
【问题描述】:

我正在尝试调用一个简单的 Web 服务来获取地址的长和纬度,当我手动尝试时它可以工作:

https://services.gisgraphy.com/geocoding/?address=paris

但是使用代码,我得到 401 unauthorize.. 我做错了什么?

        WebRequest request = WebRequest.Create("https://services.gisgraphy.com/geocoding/?address=paris");
        request.Credentials = CredentialCache.DefaultCredentials;
        request.Method = "GET";
        WebResponse response = request.GetResponse(); // It happens here.

【问题讨论】:

  • 你为什么要传递 DefaultCredentials?你试过不这样做吗?您是否阅读了他们的文档并了解需要哪些身份验证?
  • 没有它会出现同样的错误,我这样做只是因为我在互联网上遵循了一个代码。我没有阅读他们的文档。我现在希望它会帮助@mason
  • 还能是什么? ..
  • @mason 找不到任何关于身份验证的内容..

标签: c# asp.net web-services


【解决方案1】:

关于这个问题的几件事:

  • 检查 URL/Web 服务是否可以通过以下方式直接访问 浏览器/邮递员工具。
  • 其次,正如我在那里的一位朋友提到的那样 网络服务有一些安全协议。可能是它不允许 来自外部的请求(即来自其域以外的请求)

一旦你深入了解了以上两种可能性,你应该可以继续前进。

【讨论】:

    【解决方案2】:

    我做错了什么?

    您还没有阅读the website belonging to the API you're calling 顶部的蓝色大条:

    Gisgraphy 是开源的,仅使用开放数据。此服务器仅用于演示。测试它,使用网络服务,然后在本地安装 Gisgraphy 或订阅高级托管服务

    所以他们可能检测到您正在从他们的操场外调用他们的 API,并拒绝您这样做。

    所以,要么在本地安装它,要么订阅他们的托管服务。后者可能会为您提供一个 API 密钥,允许您进行 API 调用。

    当然,您可以假装自己的请求来自浏览器,例如使用 User-agent 和 Accept 标头,但他们肯定会尝试检测并完全阻止您的 IP 地址。只需支付,或在本地托管。

    【讨论】:

    • 他们不应该使用钥匙吗?如果您伪造网络浏览器,则可以轻松访问它。
    • @VDWWD 可能会起作用。但它也可能只是暂时起作用,见最后一段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多