www.text не показывает полные данные в Android

1

Я использую следующий код, чтобы получить текст с веб-страницы:

    private IEnumerator FetchText() {
        WWW www = new WWW(URL);

        yield return www;

        if(www.error == null) {
            myText.text = www.text.Length.ToString();
        }
        ...
    }

Когда я запускаю это в Unity, я получаю 185616 символы длинной строки. Но когда я запускаю это в Android-устройстве, я получаю только символы 47133. Это потому, что эта веб-страница ведет себя по-разному в Windows и Android? Если да, то как я могу получить тот же контент из Android, как и с настольного ПК.

Спасибо.

  • 0
    Весьма вероятно, что проблема в том, что веб-сайт / веб-служба обнаруживают вашего агента пользователя. Они также могут использовать другие заголовки, чтобы изменить ответ. Этот код работает в редакторе?
  • 0
    Да, это работает в редакторе.
Показать ещё 7 комментариев
Теги:
unity3d
web

2 ответа

2
Лучший ответ

Выполнение ответа tier1.

Запрос POST:

private IEnumerator FetchText()
{
    string URL = "www.yahoo.com";
    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> headers = new Dictionary<string, string>();
    headers.Add("User-Agent", userAgent);
    string postData = "test";
    string data = "data=" + postData;

    WWW www = new WWW(URL, Encoding.UTF8.GetBytes(data), headers);
    yield return www;


    if (string.IsNullOrEmpty(www.error))
    {
        //myText.text = www.text.Length.ToString();
        Debug.Log("Got: " + www.text);
    }
    else
    {
        Debug.Log("Error: " + www.error);
    }
}

Запрос GET:

Установка параметра WWW byte[] postData в значение null приведет к его запросу GET.

private IEnumerator FetchText()
{

    string userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";
    string URL = "www.yahoo.com";

    Dictionary<string, string> headers = new Dictionary<string, string>();
    headers.Add("User-Agent", userAgent);

    WWW www = new WWW(URL, null, headers);
    yield return www;


    if (string.IsNullOrEmpty(www.error))
    {
        //myText.text = www.text.Length.ToString();
        Debug.Log("Got: " + www.text);
    }
    else
    {
        Debug.Log("Error: " + www.error);
    }
}

В соответствии с вашим исходным кодом вам нужен метод запроса GET. Это будет маскироваться как запрос из браузера Chrome. Вы можете получить User-Agent здесь.

  • 0
    Я попробую это сейчас и дам вам знать.
  • 1
    Спасибо, это сработало :)
Показать ещё 1 комментарий
2

Возможно, URL-адрес, который вы пытаетесь извлечь, - это обнаружение вашего пользовательского агента и отправка вам на какой-то мобильный сайт с меньшим телом ответа.

Я не очень хорошо знаком с используемой библиотекой, но вы можете попробовать вручную настроить заголовок User-Agent.

Например:

User-Agent: Mozilla/5.0 (Windows NT 6.3, Trident/7.0; rv: 11.0), как Gecko

  • 0
    Я попробую это и вернусь к вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню