asp.net — curl не может публиковать данные на странице php

Я пытаюсь отправить значение в форму, чтобы получить данные со страницы aspx, но я не могу получить данные

  1. Первый URL, который будет открыт:
    $url="https://www.clarkcountycourts.us/Anonymous/default.aspx" (куки установлены здесь)

  2. Второй URL от мы должны искать данные
    $url3 ="https://www.clarkcountycourts.us/Anonymous/Search.aspx"

Когда я публикую данные, я просто получаю HTML страницы 3 вместо данных со страницы 2

Ниже мой код, что мне не хватает? пожалуйста, направь меня.

<?php
$url="https://www.clarkcountycourts.us/Anonymous/default.aspx";
$cookie="cookie.txt";
$url3 ="https://www.clarkcountycourts.us/Anonymous/Search.aspx";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie);  // <-- add this line
curl_setopt ($ch, CURLOPT_REFERER, $url);
$result = curl_exec ($ch);$SearchBy = "2";
$AttorneySearchMode="Name";
$LastName= "Smith";
$FirstName= "William";
$MiddleName ="";
$CaseStatusType= "0";
$SortBy= "fileddate";
$DateFiledOnAfter = "";
$DateFiledOnBefore = "";
$SearchSubmit ="Search";

$fields = array(
'SearchBy' => urlencode($SearchBy),
'AttorneySearchMode' => urlencode($AttorneySearchMode),
'LastName' => urlencode($LastName),
'FirstName' => urlencode($FirstName),
'MiddleName' => urlencode($MiddleName),
'CaseStatusType' => urlencode($CaseStatusType),
'SortBy' => urlencode($SortBy),
'DateFiledOnAfter' => urlencode($DateFiledOnAfter),
'DateFiledOnBefore' => urlencode($DateFiledOnBefore),
'SearchSubmit' => urlencode($SearchSubmit)
);

$fields_string = "";
foreach ($fields as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
$fields_string = rtrim($fields_string, '&');

curl_setopt($ch, CURLOPT_URL, $url3);
curl_setopt($ch, CURLOPT_HEADER, true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result2 = curl_exec ($ch);
print_r($result2);

3

Решение

Потребовалось время, чтобы понять это — но приведенный ниже код должен повторить результаты после поиска на основе вашего исходного запроса Уильяма Смита в качестве адвоката. Надеюсь, что это имеет смысл ….

            define('ROOT','c:/wwwroot');
$url_base='https://www.clarkcountycourts.us';
$url_login=$url_base.'/Anonymous/Login.aspx?ReturnUrl=/Anonymous/default.aspx';
$url_start=$url_base.'/Anonymous/default.aspx';
$url_search=$url_base.'/Anonymous/Search.aspx?ID=200&NodeID=101,103,104,105,500,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,797,798&NodeDesc=All%20Courts';
$cookiejar=tempnam( sys_get_temp_dir(), 'cookiejar_' );

$lastname='smith';
$firstname='william';

$formparams=array(
'__VIEWSTATEGENERATOR',
'__EVENTVALIDATION',
'__EVENTTARGET',
'__EVENTARGUMENT',
'__VIEWSTATE'
);
$stdparams=array(
'SearchBy' => '2',
'AttorneySearchMode' => 'Name',
'LastName' => $lastname,
'FirstName' => $firstname,
'MiddleName' => '',
'CaseStatusType' => '0',
'SortBy' => 'fileddate',
'DateFiledOnAfter' => '',
'DateFiledOnBefore' => '',
'SearchSubmit' => 'Search',
'CaseSearchMode' => 'CaseNumber',
'CaseSearchValue' => '',
'CitationSearchValue' => '',
'CourtCaseSearchValue' => '',
'PartySearchMode' => 'Name',
'cboState' => 'AA',
'DateOfBirth' => '',
'DriverLicNum' => '',
'chkCriminal' => 'on',
'chkFamily' => 'on',
'chkCivil' => 'on',
'chkProbate' => 'on',
'chkDtRangeCriminal' => 'on',
'chkDtRangeFamily' => 'on',
'chkDtRangeCivil' => 'on',
'chkDtRangeProbate' => 'on',
'chkCriminalMagist' => 'on',
'chkFamilyMagist' => 'on',
'chkCivilMagist' => 'on',
'chkProbateMagist' => 'on',
'DateSettingOnAfter' => '',
'DateSettingOnBefore' => '',
'SearchType' => 'PARTY',
'SearchMode' => 'NAME',
'NameTypeKy' => 'ALIAS',
'BaseConnKy' => 'AT',
'StatusType' => 'true',
'ShowInactive' => '',
'AllStatusTypes' => 'true',
'CaseCategories' => '',
'RequireFirstName' => 'False',
'CaseTypeIDs' => '',
'HearingTypeIDs' => ''
);
/* A fudge I know, manually build this param - I think it might be constructed using javascript on submission */
$stdparams['SearchParams']='SearchBy~~Search+By:~~Attorney~~Attorney||AttorneyNameOption~~Party+Search+Mode:~~Name~~Name||LastName~~Last+Name:~~'.$lastname.'~~'.$lastname.'||FirstName~~First+Name:~~'.$firstname.'~~'.$firstname.'||AllOption~~Case+Status:~~0~~All||selectSortBy~~Sort+By:~~Filed+Date~~Filed+Date ';/* Initialise curl and set basic options */
$curl=curl_init();
if( parse_url( $url_base,PHP_URL_SCHEME )=='https' ){
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $curl, CURLOPT_CAINFO, realpath( ROOT . '/cacert.pem' ) );
}
curl_setopt( $curl, CURLINFO_HEADER_OUT, true );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $curl, CURLOPT_AUTOREFERER, true );
curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0' );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array('Host: '.parse_url( $url_login,PHP_URL_HOST ),'Connection: keep-alive') );/* Stage 1 - Get initial page to obtain session cookies etc and store in cookiejar...mmmmm, cookies! */
curl_setopt( $curl, CURLOPT_URL, $url_login );
curl_setopt( $curl, CURLOPT_COOKIEJAR, $cookiejar );
curl_setopt( $curl, CURLOPT_COOKIESESSION, true );
$res=curl_exec( $curl );/* Step 2 - GET form page and analyse input elements */
curl_setopt( $curl, CURLOPT_URL, $url_search );
curl_setopt( $curl, CURLOPT_AUTOREFERER, true );
curl_setopt( $curl, CURLOPT_COOKIEFILE, $cookiejar );
curl_setopt( $curl, CURLOPT_COOKIESESSION, false );
$res=curl_exec( $curl );/* utility class that simplifies getting DOMDocument with error checking etc */
$dom=new htmldom( $res );
$html=$dom->gethtml();
$col=$html->getElementsByTagName('input');

/* we need to know values for specific fields - add to array of params to be submitted */
foreach( $col as $index => $node ){
if( in_array( $node->getAttribute('name'), $formparams ) ) {
$stdparams[ $node->getAttribute('name') ]=$node->getAttribute('value');
}
}
/* Not sure how the 'SearchParams' field value is calculated so calculated manually above..... *//* Stage 3 - POST */
/* Prepare search query */
$info=$res='';
$querystring=http_build_query( $stdparams, '', '&' );
curl_setopt( $curl, CURLOPT_URL, $url_search );
curl_setopt( $curl, CURLOPT_REFERER, $url_search );
curl_setopt( $curl, CURLOPT_COOKIEFILE, $cookiejar );
curl_setopt( $curl, CURLOPT_COOKIESESSION, false );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $querystring );
$res=curl_exec( $curl );
$info=curl_getinfo( $curl );/* The final search results - you could manipulate the dom to get specific items if you wished */
echo '<pre>';
print_r( $res );
echo '</pre>';

/* Close curl */
curl_close( $curl );

Для полноты утилиты, упомянутого выше класса.

class htmldom{
private $html;
public function __construct( $data=false, $convert=true ){
try{
if( !$data ) return false;
libxml_use_internal_errors( true );
$this->html = new DOMDocument('1.0','utf-8');
$this->html->validateOnParse=false;
$this->html->standalone=true;
$this->html->preserveWhiteSpace=true;
$this->html->strictErrorChecking=false;
$this->html->substituteEntities=false;
$this->html->recover=true;
$this->html->formatOutput=false;

$this->html->loadHTML( $convert ? mb_convert_encoding( $data, 'utf-8' ) : $data );

$parse_errs=serialize( libxml_get_last_error() );
libxml_clear_errors();

}catch( Exception $e ){
die( $e->getMessage() );
}
}
public function gethtml(){
return $this->html;
}
}
5

Другие решения

У вас здесь две вещи.

  1. Вы не используете банку печенья правильно. CURLOPT_COOKIEJAR используется, когда вы хотите сохранить файлы cookie, установленные с сервера. Таким образом, cURL не работает как программируемый браузер. Если вы хотите установить сеанс (cookie), тогда первый запрос использует CURLOPT_COOKIEJAR и последующие запросы будут использовать CURLOPT_COOKIEFILE

    CURLOPT_COOKIEJAR печенье помещают в банку от сервер.
    CURLOPT_COOKIEFILE куки отправляются из файла куки вернуться к сервер.

    С помощью CURLOPT_COOKIEJAR после первого подключения к серверу будет просто перезаписывать банку cookie каждый раз.

Cookies и cURL были для меня постоянным источником разочарования, поэтому я, возможно, сделаю более крупную сделку по этому первому вопросу.

  1. Когда я вручную выполняю поиск на этом сервере, формы в конечном итоге публикуются по следующим URL:

    https://www.clarkcountycourts.us/Anonymous/Search.aspx?ID=200&NodeID = 101.103.104.105.500.600.601.602.603.604.605.606.607.608.609.610.611.612.613.614.615.616.617.618.619.699.700.701.702.703.704.705.706.707.708.709.710.711.712.713.714.715.716.717.718.719.720.721.722.723.724.725.726.727.728.729.730.731.797.798&NodeDesc = Все% 20Courts

    Кроме того, когда я размещаю форму в своем браузере, отправляются и другие поля.

Некоторые из них выглядят важными — __VIEWSTATE, __EVENTVALIDATION, __VIEWSTATEGENERATOR,

__EVENTTARGET:
__EVENTARGUMENT:
__VIEWSTATE:/wEPDwULLTE3NDQ0MTE0OTgPZBYCZg9kFgICAQ8WAh4HVmlzaWJsZWgWAgIDDw9kFgIeB29ua2V5dXAFJnRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCk7ZGSj5Ki6eeFgaBABR8RCqLZPLI/WZw==
__VIEWSTATEGENERATOR:B40748C4
__EVENTVALIDATION:/wEWAgKmuqaTBQKYxoa5CF+xFBuOB81vr2zAb/xD7VZ3+CQV
SearchBy:2
CaseSearchMode:CaseNumber
CaseSearchValue:
CitationSearchValue:
CourtCaseSearchValue:
PartySearchMode:Name
AttorneySearchMode:Name
LastName:Smith
FirstName:William
cboState:AA
MiddleName:
DateOfBirth:
DriverLicNum:
CaseStatusType:0
DateFiledOnAfter:
DateFiledOnBefore:
chkCriminal:on
chkFamily:on
chkCivil:on
chkProbate:on
chkDtRangeCriminal:on
chkDtRangeFamily:on
chkDtRangeCivil:on
chkDtRangeProbate:on
chkCriminalMagist:on
chkFamilyMagist:on
chkCivilMagist:on
chkProbateMagist:on
DateSettingOnAfter:
DateSettingOnBefore:
SortBy:fileddate
SearchSubmit:Search
SearchType:PARTY
SearchMode:NAME
NameTypeKy:ALIAS
BaseConnKy:AT
StatusType:true
ShowInactive:
AllStatusTypes:true
CaseCategories:
RequireFirstName:False
CaseTypeIDs:
HearingTypeIDs:
SearchParams:SearchBy~~Search By:~~Attorney~~Attorney||AttorneyNameOption~~Party Search Mode:~~Name~~Name||LastName~~Last Name:~~Smith~~Smith||FirstName~~First Name:~~William~~William||AllOption~~Case Status:~~0~~All||selectSortBy~~Sort By:~~Filed Date~~Filed Date

Заключение

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

5

Может быть, вы перенаправлены после первоначального POST?

Попробуйте следующее:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

Это должно игнорировать любые перенаправления.

Дополнительные параметры CURL, которые могут помочь вам в отладке:

CURLOPT_MAXREDIRS
CURLOPT_POSTREDIR

Ссылка:

http://php.net/manual/en/function.curl-setopt.php

0
По вопросам рекламы [email protected]