2013-04-26 68 views
-1

再次,我需要你的幫助。我的客戶希望使用REST服務器進行一些數據加密。我已經在Python中獲得了一個代碼片。 (我不知道Python,所以我會相信他的話)。我需要使它在PHP中工作。在PHP中爲REST轉換Python代碼

注:我使用的是Windows和XAMPP,所以如果考慮到這一點,我們將不勝感激。另外REST服務器不是真正的服務器,我不想公開這個。

我是使用cURL的新手,所以不知道我錯過了什麼使它工作。現在我有一個錯誤,指出:「無法解析主機:en.tty.is;沒有請求類型的數據記錄」。

這裏是Python代碼:

input = urllib.urlencode({‘plaintext’: ‘some secret information’}) 
cyphertext = urllib2.urlopen(‘https://en.tty.is/encrypt’, input).read() 

這是我一直在嘗試在PHP和捲曲7.24.0實現:

$url ="https://en.tty.is/encrypt"; 
      $data = json_encode(array('plaintext'=>$txt)); 

      $ch = curl_init(); 
      curl_setopt($ch,CURLOPT_URL,$url); 
      curl_setopt ($ch, CURLOPT_CAINFO, MY_CAINFO_PATH); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS,$data); 

      $chleadresult = curl_exec($ch); 
      $chleadapierr = curl_errno($ch); 
      $chleaderrmsg = curl_error($ch); 
      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
      curl_close($ch); 

      if(!$chleadresult){ 
       echo $chleaderrmsg;die; 
      } 

許多欣賞任何幫助。謝謝!

回答

2

您的代碼可能存在其他問題,但至少您的PHP和Python不是等價的。

閱讀文檔urllib.urlencodeurllib2.urlopen。這些不是在操縱JSON。

的Python那些兩行是大致等效於此PHP:

$input = http_build_query(array('plaintext'=>'some secret information')); 
$ctx_post_input = stream_context_create(array(
    'http' => array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $input, 
    ), 
)); 
$cyphertext = file_get_contents('https://en.tty.is/encrypt', false, $ctx_post_input); 

$ctx_post_input['http']結構,請參閱the http context options

如果您需要使用CURL而不是http流類型,則可以輕鬆地將其轉換爲適當的CURL選項。

也就是說,你的實際錯誤是Could not resolve host: en.tty.is,這意味着很簡單,en.tty.is不存在。但是你說這不是真正的服務器,所以也許這是一個虛假的錯誤。

+0

我把你的cURL代碼替換了,我得到的錯誤相對相同:「file_get_contents(https://en.tty.is/encrypt):未能打開流:php_network_getaddresses:getaddrinfo失敗:請求的名稱是有效的,但沒有找到所請求類型的數據「,其中明確指出域名有效,但數據不是所請求的類型。我想這與標題中的內容類型有關。我不需要強制使用cURL,我只需要通過此服務器獲取加密數據。謝謝你的幫助。 – despina 2013-04-26 13:40:40

+0

@despina,對不起,它應該是「內容」而不是「數據」(我從內存中寫入)。查看流選項文檔的新鏈接。 – 2013-04-26 14:09:29