Cloudflare не будет кэшировать страницу с помощью запроса CURL - PullRequest
0 голосов
/ 03 сентября 2018

One.php делает два отдельных запроса CURL на two.php . Я хочу, чтобы Cloudflare кэшировал первый ответ и обслуживал этот кэш во втором ответе. Но по какой-то причине Cloudflare не кэширует ни ответ. Если я затем посещаю two.php с помощью своего браузера, он все равно не кэшируется Если я обновлю two.php в своем браузере, я наконец получу HIT кеша. Как запустить кеширование на Cloudflare с помощью запросов CURL?

Тест на голые кости:

. / One.php

header("Cache-Control: no-store");
$url = "http://www.example.com/two.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_exec($ch); // prints current timestamp, see two.php
curl_close($ch);

sleep(1);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_exec($ch); // prints current timestamp, see two.php
curl_close($ch);

. / Two.php

header( 'Cache-Control: public, max-age=10' );
print( time()."<br>\r\n" );

Расширенный тест:

Я попытался установить заголовок User-Agent и использовать файл cookie cfduid Cloudflare. Я пытался выдавать запросы CURL на двух разных сайтах и ​​между двумя разными серверами. Я пробовал HTTP и HTTPS. Я попытался запустить one.php с direct.example.com (который обходит cloudflare).

. / One.php

<code>header("Cache-Control: no-store");

$url = "http://www.example.com/target.php";
$request_headers = array(
  'Connection: keep-alive',
  'Upgrade-Insecure-Requests: 1',
  'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
  'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'Accept-Encoding: compressed',
  'Accept-Language: en-US,en;q=0.9',
);

// Fetch CFDUID Cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$response_headers = curl_exec($ch);
curl_close($ch);

// Extract Cookies
preg_match_all( '/^Set-Cookie:\s*(.+?);?\s*$/mi', $response_headers, $cookies);
$cookies = implode( ';', $cookies[1] );

// Setup First request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_COOKIE, $cookies );

// Print First Response
echo( "First Response:<br>\r\n<pre>" );
curl_exec($ch);
curl_close($ch);
echo( "
"); // Пауза сон (1); // Настройка второго запроса $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_HTTPHEADER, $ request_headers); curl_setopt ($ ch, CURLOPT_COOKIE, $ cookie); // Запись информации запроса CURL curl_setopt ($ ch, CURLOPT_VERBOSE, true); $ verbose = fopen ('php: // temp', 'w +'); curl_setopt ($ ch, CURLOPT_STDERR, $ verbose); // Распечатать второй ответ эхо («Второй ответ:
\ r \ n
" );
curl_exec($ch);
curl_close($ch);
echo( "
»); // Показать информацию запроса CURL перемотать ($ многословным); $ verboseLog = stream_get_contents ($ verbose); echo "CURL Подробная информация:
\ r \ n
", htmlspecialchars($verboseLog), "
\ r \ n";

. / Two.php

header("Cache-Control: public, max-age=10");
header( "set-cookie: test1=true; test2=true" );
echo( time() . "\r\n" );
var_dump( getallheaders() );

Расширенный тестовый выход (цензура):

First Response:
1536190748
array(25) {
  ["Content-Type"]=>
  string(0) ""
  ["Content-Length"]=>
  string(1) "0"
  ["X-Original-Url"]=>
  string(20) "/target.php"
  ["Was-Default-Hostname"]=>
  string(33) "*****.azurewebsites.net"
  ["X-Site-Deployment-Id"]=>
  string(15) "*****"
  ["Disguised-Host"]=>
  string(21) "www.*****.com"
  ["X-Arr-Log-Id"]=>
  string(36) "c157*****e003"
  ["Is-Service-Tunneled"]=>
  string(1) "0"
  ["Client-Ip"]=>
  string(21) "*.*.*.175:18968"
  ["X-Waws-Unencoded-Url"]=>
  string(20) "/target.php"
  ["Cf-Connecting-Ip"]=>
  string(12) "*.*.*.33"
  ["Upgrade-Insecure-Requests"]=>
  string(1) "1"
  ["Cf-Visitor"]=>
  string(17) "{"scheme":"http"}"
  ["X-Forwarded-Proto"]=>
  string(4) "http"
  ["Cf-Ray"]=>
  string(20) "455c*****-ATL"
  ["X-Forwarded-For"]=>
  string(35) "*.*.*.33, *.*.*.175:18968"
  ["Cf-Ipcountry"]=>
  string(2) "US"
  ["User-Agent"]=>
  string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/*.*.*.106 Safari/537.36"
  ["Max-Forwards"]=>
  string(2) "10"
  ["Host"]=>
  string(21) "www.*****.com"
  ["Cookie"]=>
  string(279) "__cfduid=d2be*****0748; expires=Thu, 05-Sep-19 23:39:08 GMT; path=/; domain=.*****.com; HttpOnly;test1=true; test2=true;ARRAffinity=91cd*****4f3f;Path=/;HttpOnly;Domain=www.*****.com"
  ["Accept-Language"]=>
  string(14) "en-US,en;q=0.9"
  ["Accept-Encoding"]=>
  string(4) "gzip"
  ["Accept"]=>
  string(85) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
  ["Connection"]=>
  string(10) "Keep-Alive"
}

Second Response:
1536190749
array(25) {
  ["Content-Type"]=>
  string(0) ""
  ["Content-Length"]=>
  string(1) "0"
  ["X-Original-Url"]=>
  string(20) "/target.php"
  ["Was-Default-Hostname"]=>
  string(33) "*****.azurewebsites.net"
  ["X-Site-Deployment-Id"]=>
  string(15) "*****"
  ["Disguised-Host"]=>
  string(21) "www.*****.com"
  ["X-Arr-Log-Id"]=>
  string(36) "588f*****3a02"
  ["Is-Service-Tunneled"]=>
  string(1) "0"
  ["Client-Ip"]=>
  string(21) "*.*.*.175:19820"
  ["X-Waws-Unencoded-Url"]=>
  string(20) "/target.php"
  ["Cf-Connecting-Ip"]=>
  string(12) "*.*.*.33"
  ["Upgrade-Insecure-Requests"]=>
  string(1) "1"
  ["Cf-Visitor"]=>
  string(17) "{"scheme":"http"}"
  ["X-Forwarded-Proto"]=>
  string(4) "http"
  ["Cf-Ray"]=>
  string(20) "455c8*****-ATL"
  ["X-Forwarded-For"]=>
  string(35) "*.*.*.33, *.*.*.175:19820"
  ["Cf-Ipcountry"]=>
  string(2) "US"
  ["User-Agent"]=>
  string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/*.*.*.106 Safari/537.36"
  ["Max-Forwards"]=>
  string(2) "10"
  ["Host"]=>
  string(21) "www.*****.com"
  ["Cookie"]=>
  string(279) "__cfduid=d2be*****0748; expires=Thu, 05-Sep-19 23:39:08 GMT; path=/; domain=.*****.com; HttpOnly;test1=true; test2=true;ARRAffinity=91cd*****4f3f;Path=/;HttpOnly;Domain=www.*****.com"
  ["Accept-Language"]=>
  string(14) "en-US,en;q=0.9"
  ["Accept-Encoding"]=>
  string(4) "gzip"
  ["Accept"]=>
  string(85) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
  ["Connection"]=>
  string(10) "Keep-Alive"
}

CURL Verbose Info:
* Hostname www.*****.com was found in DNS cache
*   Trying *.*.*.46...
* TCP_NODELAY set
* Connected to www.*****.com (*.*.*.46) port 80 (#0)
> GET /target.php HTTP/1.1
Host: www.*****.com
Cookie: __cfduid=d2be*****0748; expires=Thu, 05-Sep-19 23:39:08 GMT; path=/; domain=.*****.com; HttpOnly;test1=true; test2=true;ARRAffinity=91cd*****4f3f;Path=/;HttpOnly;Domain=www.*****.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/*.*.*.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: compressed
Accept-Language: en-US,en;q=0.9

< HTTP/1.1 200 OK
< Date: Wed, 05 Sep 2018 23:39:10 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: public, max-age=10
< Vary: Accept-Encoding
< Set-Cookie: test1=true; test2=true
< X-Powered-By: PHP/5.6.37
< X-Powered-By: ASP.NET
< CF-Cache-Status: MISS
< Server: cloudflare
< CF-RAY: 455c*****-ATL
< 
* Connection #0 to host www.*****.com left intact

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Взгляните на этот репозиторий github cloud-flare-bypass . Его код имеет параметр cache on / off. Что я думаю, может быть полезно для вас. Смотри взорви его фрагмент кода.

<?php
require __DIR__ . '/../vendor/autoload.php';
use CloudflareBypass\RequestMethod\CFCurl;
$curl_cf_wrapper = new CFCurl(array(
    'cache'         => true,   // Caching now enabled by default; stores clearance tokens in Cache folder
    'max_retries'   => 5       // Max attempts to try and get CF clearance
));
// Get Example: 1
$ch = curl_init("http://thebot.net/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36');
echo $curl_cf_wrapper->exec($ch); // Done! NOTE: HEAD requests not supported!
curl_close($ch);
0 голосов
/ 03 сентября 2018

Запросы к CloudFlare географически распределены. Скорее всего, ваш сервер подключен к другому краевому местоположению CloudFlare, чем вы (сейчас их 152), поэтому вы не сможете воспользоваться его вызовами.

...