2015-12-17 3 views
1

Я пытаюсь настроить следующий код для приема запросов curl от php с помощью nodejs через протокол https. Я знаю, что код работает с http в стороне nodejs ., но как только я переключить протокол HTTPS, "RECEIVED" не вошел в nodejs Это:app.post ('/ posts' in socket.io с https

app.post('/posts', function(req, res){ 

    console.log("RECEIVED"); 

}); 

Подводя итог:

  • «получил» регистрируется с nodejs в режиме HTTP
  • "получил" является НЕ вход с nodejs в режиме HTTPS
  • $ curl_url (в HTTP) 'http://127.0.0.1:'.. $ Socket_port '/ сообщений;
  • $ curl_url (в HTTPS) 'https://127.0.0.1:'. $ Socket_port. '/ Posts';

Есть ли у кого-нибудь идеи по этому поводу? Вот мой локон функция:

$ch = curl_init(); 

    $ch_options = array("Expect:"); 

    if($encode_json){ 
     array_push($ch_options,"Content-type: application/json"); 
     $data = json_encode($data); 
    }else{ 
     $data = http_build_query($data); 
    } 

    //$data isn't received in either format mode 

    curl_setopt($ch, CURLOPT_HTTPHEADER, $ch_options); 

    curl_setopt($ch, CURLOPT_URL, $url); 

    curl_setopt($ch, CURLOPT_HEADER, 0); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2); 

    curl_setopt($ch, CURLOPT_POST, true); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

    curl_exec($ch); 

    $feedback = curl_getinfo($ch); 

    curl_close($ch); 

EDIT:. Код, который решает все (вызывается после app.post, , который работает с HTTP с HTTPS только этой функции [app.post ('/ пост'. ..] не AFAIK)

if(protocol == "https"){ 
    preparedApp = require(protocol).createServer(sslOptions,app); 
}else if(protocol == "http") 
    preparedApp = require(protocol).Server(app); 

preparedApp.listen(socket_port, function(){ 
    //literally nothing here 
}); 

$feedback свалка:

print_r: 
Array 
(
    [url] => https://127.0.0.1:socket_port/posts 
    [content_type] => 
    [http_code] => 0 
    [header_size] => 0 
    [request_size] => 0 
    [filetime] => -1 
    [ssl_verify_result] => 1 
    [redirect_count] => 0 
    [total_time] => 0.005724 
    [namelookup_time] => 1.1E-5 
    [connect_time] => 5.5E-5  //IT IS connecting/knows presence, but doens't route /posts... 
    [pretransfer_time] => 0 
    [size_upload] => 0 
    [size_download] => 0 
    [speed_download] => 0 
    [speed_upload] => 0 
    [download_content_length] => -1 
    [upload_content_length] => -1 
    [starttransfer_time] => 0 
    [redirect_time] => 0 
    [redirect_url] => 
    [primary_ip] => 127.0.0.1 
    [certinfo] => Array 
     (
     ) 

    [primary_port] => socket_port 
    [local_ip] => 127.0.0.1 
    [local_port] => 54576 
) 
+0

Вы должны настроить сервер [HTTPS] (http://stackoverflow.com/questions/11744975/enabling-https-on-express-js) в своем узле вместо HTTP-протокола. – Adam

+0

Вы используете https.createServer? – Gary

+0

@Gary Сервер настроен отлично с https, извините, если я забыл упомянуть об этом. Все работает, кроме этого ... – Fane

ответ

0

После выполнения некоторых исследований я заметил curl_exec($ch) возвращал ложь После р. rogramming заброс, такие как

try{ $test = curl_exec($ch) 

    if ($test) 
     throw new Exception(curl_error($ch), curl_errno($ch)); 

    } catch(Exception $e) { 

    trigger_error(sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()), 
     E_USER_ERROR); 

    } 

я получил ошибку Curl failed with error #51: SSL: certificate subject name 'mydomain.com' does not match target host name '127.0.0.1'

TL; DR: Так что я только что добавили

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

к опциям канальных и теперь работает