Загрузите файл pdf из curl, пока URL-адрес перенаправляется - PullRequest
0 голосов
/ 13 июля 2020

Я создал один скрипт в PHP. Он входит на один веб-сайт, а затем go в список счетов на этом веб-сайте, и я хочу создать сценарий для их загрузки. Ссылка в одном счете-фактуре выглядит так:

$newest_invoice_url= 
    https://secure3.billerweb.com/alw/inetSrv?client=701122300&type=ApplicationMenu&authTkn=r7mdbUaDHRqEWm4sbY1q40uvMhNQFjwDVOzhEZaAyFrGMyD0pTgCde/QHTSUf0YrJJw5PThCcAV8O7a2ipV5IZmi7jNGArIZ1ddy-WEJcuNAbMp0VRMnNO9VFCA7s78vwzB9VqCn/Qm5zfyzXH2YoNaqMATofgc3v-SSLYzzV3LGGVlvAF6TPS4JgPbcdxotOwJaGhPsM0qfoBiE74zECNA3o-x9-Amqa-/3Q1cRFUa3LtV77l/mDG1pQP1KbISD27TfSPvG1IgyzOz1BP6n0Ah4WksP95yAMhDUuaViKECBpC4n3n-SdyHyQpXz8UsPS8F3WWwj7aMwFvp2aaHRnP5j3uVl4gRGw1l3ee5BLmhkBZFdB57bcAP2Pinmk4krIuqvzjCZM780j9lMQ7E/lS-KqWQN/zrGF3JOg6CP3HYtna6Ne-XgseIxsf-Ecu7qKfZ-DRCSXtv1ulnn8PW1btvjgUeS-Aia8mo9T3CzUmVnbdkOG0JfrrT9mjHOUevqZb-48776CX9svPxujKVFjHELPX5E8bXzv2yIWyMoHfqpaVm1D2B2BP56GYwD5OQL0a5BNnsEjHBIpMMUCsGAbpXl0bABleBx&unitCode=ALW&keyTkn=W9EqaRvq0FQ_Ij9Nj1zRaPoc88pUKFGSOYlgLKY6qQxuLnHdhQ38Gq8CUviDeObpxvo46fbZ1XRjPTzMc0tTqCphM9Q79QjheglAX2Ay2Gzdo2r0KnRx9gBqoAyKSHk/93tuEmVAbszFdYfP0E-sJRCUWvnNUTDOe6TyEeblIzQ7wEDrNt4nmEI_&slchannel=ALWRSA&enc=web

Это https://secure3.billerweb.com не тот сайт, на котором я вошел, это ссылка перенаправления. Итак, я создал этот код:

    $ch = curl_init();
$source = $newest_invoice_url;
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch,          CURLOPT_FOLLOWLOCATION ,true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE,'cookie.txt');
              curl_setopt($ch, CURLOPT_HTTPHEADER , array(
              'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
             // 'accept: application/json',
              'accept-encoding: gzip, deflate, br',
              'accept-language: en-US,en;q=0.9',
              'Content-Type: application/pdf',
              $auth_token,
              ));
$data = curl_exec ($ch);
curl_close ($ch);

print_r($data);

Из этого кода я получаю следующее:

HTTP/1.1 302 Moved Temporarily
Date: Mon, 13 Jul 2020 15:44:09 GMT
Content-length: 0
Content-type: text/html
Set-cookie: _stkn-5VxD.GHe=419dZioHkOUhg6RZcU844Q__; Path=/alw/inetSrv; HttpOnly; Secure; SameSite=None
Strict-transport-security: max-age=31536000
Cache-control: no-store,no-cache,max-age=0,must-revalidate
Pragma: no-cache
Content-security-policy: child-src 'self'; connect-src 'self' https://www.google-analytics.com; default-src 'self'; font-src 'self' https://fonts.gstatic.com; frame-ancestors 'self'; img-src * data: https://www.google-analytics.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
X-content-type-options: nosniff
X-xss-protection: 1; mode=block
Location: https://secure3.billerweb.com/alw/inetSrv?sessionHandle=5VxD/GHel0zjLaUDhStfaVGhnhkpviikX-aSlAWWrj1U7BauY2w9NzAxMTIyMzAwJlJlcXVlc3RUeXBlPVNob3dQZGY_&client=701122300&type=CompatPresentmentService&action=ShowPdf&firstPage=true

HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 15:44:09 GMT
Content-length: 1123
Content-type: text/html
Set-cookie: _stkn-5VxD.GHe=419dZioHkOUhg6RZcU844Q__; Path=/alw/inetSrv; HttpOnly; Secure; SameSite=None
Strict-transport-security: max-age=31536000
Cache-control: no-store,no-cache,max-age=0,must-revalidate
Pragma: no-cache
Expires: -1
Content-security-policy: child-src 'self'; connect-src 'self' https://www.google-analytics.com; default-src 'self'; font-src 'self' https://fonts.gstatic.com; frame-ancestors 'self'; img-src * data: https://www.google-analytics.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
X-content-type-options: nosniff
X-xss-protection: 1; mode=block

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

                                                                                                              
<head><title></title>
                     
<LINK REL="StyleSheet" HREF="styles/mainStyle.css">
</head>

<body>
<div style="float: left; border: 1px solid black; background-color: #FFFFFF; padding: 5px">
    <div class="TitleFont">Operation failed</div>
    <div class="TitleFont">Reason</div>
    <div>
    <div class="custom-message-box">
                <div class="ErrorFont" ALIGN="left" >A server error has occurred.</div>
                <div class="ErrorFont" ALIGN="left" >Error reference id: YQL-99950</div>
                <div class="ErrorFont" ALIGN="left" >Time: Mon Jul 13 10:44:09 CDT 2020</div>
    </div>
    </div>
    <div style="width: 600px">
        <p class="form-style-text">
        If contacting customer support, please quote the above error reference id. You may be able to press the browser Back button to return to the previous screen. Otherwise you may need to login again. We apologize for the inconvenience.
        </p>
    </div>
</div>

</body>
</html>

Итак, мой код не работает хорошо, есть ли у кого-нибудь идеи, что мне делать, чтобы я мог загрузить этот файл pdf?

1 Ответ

0 голосов
/ 15 июля 2020

Я адаптировал ваш код для локального тестирования *, и он работал, как ожидалось, поэтому я не верю, что проблема заключается в коде. Скорее всего, вам лучше всего будет связаться с кем-то, кто связан с веб-сайтом, но вот несколько вещей, которые вы можете попробовать сначала для устранения неполадок:

  • Сравните журналы HTTP с успешным замените в своем браузере (о котором вы упоминали в своей ветке на Reddit), чтобы определить, не хватает ли в вашем скрипте необходимого cook ie, header и т.д. c. Обратитесь к этому руководству для Chrome или к этому руководству для Firefox, если вы незнакомы. Вы захотите включить «Сохранить журнал» в Chrome или «Сохранять журналы» в Firefox, поскольку задействовано перенаправление.
  • Убедитесь, что файлы cookie сохраняются , открыв cookie.txt и проверяя, заполнен ли файл тем, что вы видите в ответе.

* Я протестировал ваши параметры cURL с помощью очень простого сценария , который устанавливает повар ie и перенаправляет , а не точный URL в вашем сообщении.

...