Почему curl не загружает эту ссылку, а браузер загружает?

коротко: вероятно, не

длинно:

Во-первых, комментарий на странице руководства скрипта говорит о проблеме взятия этого текста и создания простого текста (без управляющих символов) версия, которая показывает то, что вы изначально видели на экране. Инструмент scriptreplay - это обходной путь, который не пытается создать простой текстовый файл, а воспроизводит текст как фильм.

Машинопись , сохраненная скриптом , трудно преобразовать в простой текстовый файл, потому что полноэкранный текстовый редактор, такой как vim, использует адресация курсора . Вместо того, чтобы перерисовывать весь экран каждый раз, когда вы вносите изменения (что в принципе позволит вам видеть серию экранов), vim перемещает курсор по экрану для внесения изменений.

Если вы не будете вносить изменения (включая прокрутку), вы, безусловно, можете получить простой экран с несколькими элементами управления. Но вопрос не в этом частном случае.

Если вам удалось заставить vim использовать описание терминала, не имеющее адресации курсора, то его «можно» принудительно перерисовать (вместо перемещения курсора). Однако vim по умолчанию использует свои встроенные описания терминала, часто игнорируя базу данных терминала (см. код ). Например, в базе данных терминала dumb не имеет адресации курсора. Версия vim имеет адресацию курсора:

/* 
 * The most minimal terminal: only clear screen and cursor positioning 
 * Always included. 
 */
    {(int)KS_NAME,      "dumb"},
    {(int)KS_CL,        "\014"},
#ifdef TERMINFO
    {(int)KS_CM,        IF_EB("\033[%i%p1%d;%p2%dH",
                                                  ESC_STR "[%i%p1%d;%p2%dH")},
#else
    {(int)KS_CM,        IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")},
#endif

Таким образом, у вас будет перемещение курсора (и обновления экрана).

Управляющие символы, которые вы видели эхом в терминале, - это другая функция. vim отправляет escape-последовательность на терминал , если это может быть xterm, чтобы спросить, какая у него версия (для включения некоторых дополнительных функций vim). Это стандартная управляющая последовательность VT100 ( Атрибуты устройства DA ), поэтому многие терминалы (кроме xterm) будут отвечать, отправляя символы на компьютер, который оставляет их в вашей командной строке.

31
08.11.2016, 12:56
3 ответа

На стороне веб-сервера есть перенаправление на следующий URL: http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg . Поскольку это CDN, точное поведение (независимо от того, перенаправлены вы или нет) может зависеть от вашего местоположения.

curl по умолчанию не выполняет перенаправления. Чтобы сделать это, добавьте аргумент -L :

curl -L -O https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-osx10.11-x86_64.dmg
70
27.01.2020, 19:37

Voy a convertir uno de los comentarios de esta publicación en una respuesta.

Hay muchos enlaces HTTP/HTTPS que requieren ciertos encabezados para funcionar. Entonces, esto dará como resultado una respuesta de trabajo de un navegador web, pero no una respuesta de trabajo en una solicitud web de back-end como curl.

Acabo de encontrarme con un sitio que requería todos los siguientes encabezados. No especificarlos resultó en un tiempo de espera.

  httpget.setHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36");
  httpget.setHeader("Upgrade-Insecure-Requests", "1");
  httpget.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
  httpget.setHeader("Accept-Encoding", "gzip, deflate, br");
  httpget.setHeader("Accept-Language", "en-US,en;q=0.9");
  httpget.setHeader("Connection", "keep-alive");
  httpget.setHeader("Host", "www.thehost.com");
1
27.01.2020, 19:37

Если браузер может загрузить файл, вы можете проверить, что делает браузер. В Google Chrome вы можете использовать следующее, чтобы увидеть, что происходит.

1 )[Вид > Разработчик > Инструменты разработчика > вкладка Сеть > вкладка Заголовки]

2 )Щелкните ссылку для загрузки.

3 )Ссылка на файл появится на вкладке инструментов разработчика.

4 )Щелкните файл правой кнопкой мыши и выберите «Копировать» > «Копировать как cURL».

Теперь у вас есть ссылка curl, которая будет работать. Вероятно, у него будут лишние параметры, которые вы можете обрезать -.

Подробнее :https://lornajane.net/posts/2013/chrome-feature-copy-as-curl

11
27.01.2020, 19:37

Теги

Похожие вопросы