Попытка ИЗБЕЖАТЬ сессии ASP.NET, используя cURL - PullRequest
4 голосов
/ 20 августа 2010

Я использую веб-сервис от провайдера, который немного слишком помогает предугадывать мои потребности. Они дали мне HTML-фрагмент для вставки на мой сайт, чтобы пользователи могли нажимать на них, чтобы активировать свои сервисы. Я бы предпочел написать сценарий этого процесса, поэтому у меня есть php-скрипт, который отправляет запрос cURL на тот же URL-адрес, в зависимости от ситуации. Однако этот провайдер следит за моим сеансом и интерпретирует каждый новый запрос как обновление первого, а не каждый уникальный запрос.

Я связался с провайдером по поводу моей проблемы, и они зашли настолько далеко, что сообщили мне, что их система работает, как предполагалось, и что я не могу избежать использования одного и того же сеанса ASP.NET для каждого последующего запрос cURL. Хотя моим любимым вариантом было бы переключиться на другого поставщика, сейчас это, похоже, не вариант. Есть ли надежный способ получить новый сеанс ASP.NET с каждым запросом cURL?

Я пробовал следующий набор CURLOPT , но безрезультатно:

//initialize curl 
$ch = curl_init($url); 

//build a string out of the post_vars
$post_str = http_build_query($post_vars);

//set the necessary curl options 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "UZ_".uniqid());
curl_setopt($ch, CURLOPT_REFERER, CURRENT_SITE_URL."index.php?newsession=".uniqid());
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Pragma: no-cache", "Cache-Control: no-cache"));

//execute the call to the backend script, retrieve the results 
$xmlstr = curl_exec($ch);

Ответы [ 4 ]

2 голосов
/ 31 августа 2010

Если cURL мало помогает, почему бы не попробовать другие методы для вызова служб из вашего скрипта, например, функцию file() php или file_get_contents().

Если вы видите, что вообще не видите никакой разницы, то поставщик услуг может использовать ваш ip для отслеживания ваших запросов. Попробуйте использовать какой-нибудь прокси для теста.

1 голос
/ 29 августа 2010

Обычный сеанс Asp.net отслеживается файлом cookie с именем ASP.NET_SessionId.Этот файл cookie отправляется в ответ на ваш первый запрос.Поэтому до тех пор, пока ваши запросы curl не отправят обратно этот файл cookie asp.net, каждый из ваших запросов не будет иметь никакого отношения друг к другу.Используйте параметр curl -c, чтобы увидеть, какие куки летят между вами и ними.Переопределение этого файла cookie файлом cookie должно работать, если вы подтвердите, что здесь используется нормальный сеанс asp.net.

Служба довольно плохо использует сеанс (http имеет гораздо более чистые способы поддержания состояния,ReST), поэтому я не буду полностью исключать возможность переключения поставщиков.

0 голосов
/ 29 августа 2010

используйте эти две строки для обработки сеанса:

curl_setopt($ch, CURLOPT_COOKIEJAR, "path/to/cookies.txt"); // cookies.txt should be writable
curl_setopt($ch, CURLOPT_COOKIEFILE, "path/to/cookies.txt");
0 голосов
/ 20 августа 2010

Хорошо, учитывая варианты, которые вы используете, кажется, вы охватили свои основы.Можете ли вы узнать, как настроены их сеансы?

Если вы знаете, как они настраивают сеанс, IE, что они используют (если это IP-адрес или нет), а затем вы можете найти обходной путь.Другой вариант - попытаться установить файлы cookie в другом файле cookie:

CURLOPT_COOKIEFILE - имя файла, содержащего данные cookie.Файл cookie может быть в формате Netscape или просто в виде заголовков простого HTTP-стиля, выгруженных в файл.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...