JSESSIONID-PHP-Curl请求
我试图向api发送一个multi-curl请求以检索数据。此特定api需要将正确的JSESSIONID cookie传递到头中,以使其正常工作 我用来发送请求的功能是:JSESSIONID-PHP-Curl请求,php,cookies,curl,jsessionid,curl-multi,Php,Cookies,Curl,Jsessionid,Curl Multi,我试图向api发送一个multi-curl请求以检索数据。此特定api需要将正确的JSESSIONID cookie传递到头中,以使其正常工作 我用来发送请求的功能是: function sendMultiRequest($data) { // initialize array of curl handles $curl_handles = array(); // returned data $result = array(); // initiali
function sendMultiRequest($data) {
// initialize array of curl handles
$curl_handles = array();
// returned data
$result = array();
// initialize multi handle
$multi_handle = curl_multi_init();
//$cookie = generateCookie();
$headers = array(
'Content-type: application/json',
'Cookie: JSESSIONID=39DDF47143F20CA952555027CD5F5EA2'
);
// loop through $data and create curl handles
// then add them to the multi-handle
foreach ($data as $key => $val) {
$curl_handles[$key] = curl_init();
curl_setopt($curl_handles[$key], CURLOPT_URL, $val);
curl_setopt($curl_handles[$key], CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_handles[$key], CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handles[$key], CURLOPT_COOKIESESSION, TRUE);
curl_multi_add_handle($multi_handle, $curl_handles[$key]);
}
// execute the handles
$running = null;
do {
curl_multi_exec($multi_handle, $running);
} while($running > 0);
// get content and remove handles
foreach($curl_handles as $key => $val) {
$result[$key] = json_decode(curl_multi_getcontent($val), TRUE);
curl_multi_remove_handle($multi_handle, $val);
}
// close curl_multi
curl_multi_close($multi_handle);
return $result;
}
我不认为这是函数问题,因为我的其他多个请求可以工作。但是当我尝试访问api时,我不知道;除非传入正确的JSESSIONID,否则无法获取数据
我知道这一点,因为我目前正在使用高级REST客户端Google Chrome扩展,当我使用扩展传递的Cookie请求头时,该函数就工作了。但是,api凭据将过期,因此我需要以编程方式创建和使用JSESSIONID
我知道我必须以某种方式使用curl-opt-COOKIEJAR和COOKIE,但我不太确定,因为我是新手。您仅在尝试模拟新会话开始时使用
curl-opt\u-COOKIESESSION
。通过执行此操作,cURL将不会从cookie jar/文件加载任何会话cookie
您还需要通过CURLOPT_COOKIEJAR
因此,以您的示例为基础:
// then add them to the multi-handle
foreach ($data as $key => $val) {
$curl_handles[$key] = curl_init();
curl_setopt($curl_handles[$key], CURLOPT_URL, $val);
curl_setopt($curl_handles[$key], CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_handles[$key], CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handles[$key], CURLOPT_COOKIEJAR, '/path/to/cookie/file');
// do this only if you need to force a new session and not load session cookie from cookie jar
curl_setopt($curl_handles[$key], CURLOPT_COOKIESESSION, TRUE);
curl_multi_add_handle($multi_handle, $curl_handles[$key]);
}
您不必手动设置会话id cookie值。这将如何帮助我创建名为“JSESSIONID”的cookie?@Karthik您无需创建cookie远程服务器在您首次请求会话时发送cookie。该cookie存储在cookie jar中,并将与后续请求一起自动发送。创建CookieJar会帮我做到这一点吗?@Karthik在第一次调用服务启动会话之前,如何获取会话ID?会话通常由服务器启动,并通过cookie传播。是否需要先调用一些API来启动会话?@Karthik听起来像是API所有者的问题。我从未使用过客户端指定其会话ID的服务。这将是非常不寻常的,并且可能不安全。