【问题标题】:403 Forbidden Unity3D C#403禁止Unity3D C#
【发布时间】:2018-11-14 09:25:24
【问题描述】:

我一直在尝试从这个链接获取信息:HIDDEN

这是我当前的代码

public static string newsLink = "HIDDEN";
public static readonly List<string> newsList = new List<string>();

void Start () {
    DontDestroyOnLoad (gameObject);
    StartCoroutine (GetNews ());
}

IEnumerator GetNews(){
    WWW w = new WWW (newsLink);
    yield return w;
    if (w.error != null) {
        print (w.error);
    } else {
        List<string>temp = w.text.Split (']').ToList ();
        foreach(string a in temp)
        {
            newsList.Add (a);
        }
        w.Dispose ();
    }
  }
}

在调试器中我收到 403 Forbidden 的错误消息

【问题讨论】:

    标签: c# unity3d web


    【解决方案1】:

    您请求的 url 要求您提供 User-Agent 来识别您的身份。您可能需要其他标头来获得适当的响应,但需要 User-Agent 标头来删除服务器抛出的 403 错误。

    创建用户代理(伪装成 Chrome)

    string userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";
    Dictionary<string, string> ht = new Dictionary<string, string>();
    ht["User-Agent"] = userAgent;
    

    然后创建带有标头的WWW 请求

    WWW w = new WWW(newsLink, null, ht);
    yield return w;
    

    请注意,您最终可能会收到您的 Html 和 Javascript 代码,而不是您从网络浏览器访问链接时收到的消息。那是因为您的客户端(Unity)不支持 Javascript 并且无法执行您的 Javascript 代码。您必须使用 php 重新编写服务器代码。最后,使用 json 代替 ]| 来分隔您的消息。

    【讨论】:

    • 很好的答案,除了我对“你必须用 php 重写服务器代码”有点害怕。希望还有其他解决方案,如果您不了解 php(例如 node.js)......但本质上是正确的。
    • @Pac0 当我的意思是重写服务器时,我并不是指像 apache 那样重写代码。我的意思是重新编写响应 url 的代码。不应使用 Javascript,因为大多数客户端无法执行它。所以php或任何其他可以响应请求的网络编程语言应该没问题。
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 2015-11-18
    • 2019-08-24
    • 2013-02-09
    • 2012-07-29
    • 2012-01-08
    • 2017-01-20
    • 2019-06-07
    相关资源
    最近更新 更多