2017-06-27 2 views
0

Dies ist mein Code in Python, um eine Verbindung zum Server herzustellen, der sehr gut funktioniert.THttpClient konnte Stream nicht öffnen: HTTP-Anforderung fehlgeschlagen! HTTP/1.1 400 Ungültige Anfrage

transport = THttpClient.THttpClient(secureUrl) 
protocol = TBinaryProtocol.TBinaryProtocol(transport) 
client = EdenRemote.Client(protocol) 
transport.open() 

print "calling openSession..." 
client.openSession(sessionID, 1) 

Wenn ich versuche, den obigen Code in PHP wie diese

$socket = new THttpClient($liveURL, 80, '', 'https'); 
$socket->setTimeoutSecs(50); 
$transport = new TBufferedTransport($socket, 1024, 1024); 
$protocol = new TBinaryProtocol($transport); 
$client = new \edenremotephp\pub\EdenRemote\EdenRemoteClient($protocol); 
$transport->open(); 
$client->openSession($result->sessionID, 1); 

Dann bekam ich folgende Fehlermeldung

Array ([type] => 2 [message] => fopen(https://edenremote.paceap.com/EdenRemote/d11fbf20-ca24-45f0-b176-4a22e28907c5): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request [file] => /home/abbas/www/local.edenremote.com/sdk/Thrift/Transport/THttpClient.php [line] => 207) 

Linie 207 Code ist

public function flush() { 
    // God, PHP really has some esoteric ways of doing simple things. 
    $host = $this->host_.($this->port_ != 80 ? ':'.$this->port_ : ''); 

    $headers = array(); 
    $defaultHeaders = array('Host' => $host, 
          'Accept' => 'application/x-thrift', 
          'User-Agent' => 'PHP/THttpClient', 
          'Content-Type' => 'application/x-thrift', 
          'Content-Length' => TStringFuncFactory::create()->strlen($this->buf_)); 
    foreach (array_merge($defaultHeaders, $this->headers_) as $key => $value) { 
     $headers[] = "$key: $value"; 
    } 

    $options = array('method' => 'POST', 
        'header' => implode("\r\n", $headers), 
        'max_redirects' => 1, 
        'content' => $this->buf_); 
    if ($this->timeout_ > 0) { 
     $options['timeout'] = $this->timeout_; 
    } 
    $this->buf_ = ''; 

    $contextid = stream_context_create(array('http' => $options)); 
    $this->handle_ = @fopen($this->scheme_.'://'.$host.$this->uri_, 'r', false, $contextid); 

    // Connect failed? 
    if ($this->handle_ === FALSE) { 
     $this->handle_ = null; 
     $error = 'THttpClient: Could not connect to '.$host.$this->uri_; 
     throw new TTransportException($error, TTransportException::NOT_OPEN); 
    } 
    } 

zu schreiben Auch ich habe versucht, die https mit t zu ändern er ssl. Für den Transport selbst habe ich versucht

$transport = new TFramedTransport($socket, 1024, 1024); 

Antwort

1

Hier war das Problem mit dem THttpClient Anruf. Der erste Parameter sollte der Host sein und der URI sollte im 3. Parameter stehen.

so die genaue Art und Weise, es zu nennen, ist

$result = json_decode(exec('./Authenticator.py')); 
$liveURL = $result->secureUrl; 
$liveURI = preg_replace('#^https?://edenremote.paceap.com#', '', rtrim($result->secureUrl,'/')); 
$socket = new THttpClient('edenremote.paceap.com', 80, $liveURI, 'https'); 
$socket->setTimeoutSecs(50); 
$transport = new TBufferedTransport($socket, 1024, 1024); 
$protocol = new TBinaryProtocol($transport); 
$client = new \edenremotephp\pub\EdenRemote\EdenRemoteClient($protocol); 
$transport->open(); 
$client->openSession($result->sessionID, 1); 
$isExist = $client->findUserByEmailAddress($result->sessionID, $account->primaryEmail); 
var_dump($isExist); 
$client->closeSession($result->sessionID); 
echo 'Done'; 
Verwandte Themen