节点JS到PHP,不能得到它的工作

我想复制一些节点的JS到PHP,但似乎无法得到它的工作! 节点在下面;

function initLogin(callback) { debug('Getting login'); request.get({ url: psnURL.SignIN , headers : { 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.3; '+options.npLanguage+'; C6502 Build/10.4.1.B.0.101) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 PlayStation App/1.60.5/'+options.npLanguage+'/'+options.npLanguage } } , function (error, response, body) { (typeof callback === "function" ? getLogin(callback, psnVars.SENBaseURL + response.req.path) : getLogin(undefined, psnVars.SENBaseURL + response.req.path)); }) } /* * @desc Login into PSN/SEN and creates a session with an auth code * @param Function callback - Calls this function once the login is complete */ function getLogin(callback, url) { request.post(psnURL.SignINPOST ,{ headers: { 'Origin':'https://auth.api.sonyentertainmentnetwork.com' ,'Referer': url } ,form:{ 'params' : 'service_entity=psn' ,'j_username' : options.email ,'j_password' : options.password } }, function (error, response, body) { request.get(response.headers.location, function (error, response, body) { if (!error) { var urlString = unescape(response.req.path); psnVars.authCode = urlString.substr(urlString.indexOf("authCode=") + 9, 6); debug('authCode obtained: ' + psnVars.authCode); getAccessToken(psnVars.authCode, callback); } else { debug('ERROR: ' + error) } }) } ) } 

而我的PHP,我不能工作;

 $c = curl_init(); curl_setopt_array($c, array( CURLOPT_URL => $PSNSignIn, CURLOPT_USERAGENT => $userAgent, CURLOPT_HEADER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_COOKIEJAR => realpath('/tmp/cookieJar.txt'), CURLOPT_FAILONERROR => 1, )); $res = curl_exec($c); $path = explode($SENBaseURL, curl_getinfo($c, CURLINFO_EFFECTIVE_URL)); $referer = $SENBaseURL . $path[1]; var_dump(file_get_contents('tmp/cookieJar.txt'), $res); $c = curl_init(); curl_setopt_array($c, array( CURLOPT_URL => $SignINPOST, CURLOPT_USERAGENT => $userAgent, CURLOPT_REFERER => $referer, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_HEADER => array( 'Origin: https://auth.api.sonyentertainmentnetwork.com', 'Content-Type: application/x-www-form-urlencoded', ), CURLOPT_POST => true, CURLOPT_POSTFIELDS => array( 'params' => 'service_entity=psn', 'j_username' => $username, 'j_password' => $password, ), CURLOPT_COOKIEFILE => 'tmp/cookieJar', CURLOPT_FAILONERROR => 1, )); $res = curl_exec($c); var_dump($res, curl_getinfo($c)); 

它应该login到索尼的服务器和检索OAuth代码,Node.js正在工作,所以这是可能的,但我似乎无法得到它在PHP中工作。

任何帮助将非常感激。

CURL正在工作,但我得到一个?authentication_error=true时,它应该返回一个我可以利用的代码。

您正在获取Authentication Error因为在行中

 CURLOPT_COOKIEFILE => 'tmp/cookieJar` 

您正在使用CURLcookieJar的错误值。 您需要添加.txt ,并将path更正为您之前在代码中使用的绝对path。 这就是为什么CURL你一个Authentication Error

纠正与以下应解决您的问题。

 CURLOPT_COOKIEFILE => '/tmp/cookieJar.txt` 

另外更改下面的行

 var_dump(file_get_contents('tmp/cookieJar.txt'), $res); 

喜欢这个:

 var_dump(file_get_contents('/tmp/cookieJar.txt'), $res); 

正如您在两次使用相对path的注释中提到的那样,在最后一次使用中省略了.txt

 $c = curl_init(); curl_setopt_array($c, array( CURLOPT_URL => $PSNSignIn, CURLOPT_USERAGENT => $userAgent, CURLOPT_HEADER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_COOKIEJAR => realpath('/tmp/cookieJar.txt'), CURLOPT_FAILONERROR => 1, )); $res = curl_exec($c); $path = explode($SENBaseURL, curl_getinfo($c, CURLINFO_EFFECTIVE_URL)); $referer = $SENBaseURL . $path[1]; var_dump(file_get_contents('/tmp/cookieJar.txt'), $res); $c = curl_init(); curl_setopt_array($c, array( CURLOPT_URL => $SignINPOST, CURLOPT_USERAGENT => $userAgent, CURLOPT_REFERER => $referer, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_HEADER => array( 'Origin: https://auth.api.sonyentertainmentnetwork.com', 'Content-Type: application/x-www-form-urlencoded', ), CURLOPT_POST => true, CURLOPT_POSTFIELDS => array( 'params' => 'service_entity=psn', 'j_username' => $username, 'j_password' => $password, ), CURLOPT_COOKIEFILE => '/tmp/cookieJar.txt', CURLOPT_FAILONERROR => 1, )); $res = curl_exec($c); var_dump($res, curl_getinfo($c));