Fragen zu CURL

Sasser

Erfahrenes Mitglied
Guten Abend!

Ich habe ein paar Fragen zu CURL, welche mir leider das WWW nicht beantworten konnte.

Ich nutze CURL in einer Schleife. Gibt es die Möglichkeit, nicht zu warten bis CURL gesendet hat (CURL sendet im Hintergrund)? Kann man auf es so einstellen, dass man keine Rückantwort bekommt und nur sendet? Oder kann man mit CURL auch zu einer ganz bestimmten Zeit senden?
 
Ich nutze die folgende Funktion in einer Schleife, in welcher zu einem bestimmten Zeitpunkt eine oder mehrere Verbindungen aufgebaut werden sollen und nur Daten gesendet werden sollen (nicht empfangen).

Kann man das noch optimieren, sodass keine Zeit durch das Senden verloren geht?

PHP:
function sendHttpRequest($requestXmlBodys) {
		$multiconnection = curl_multi_init ();
		foreach ($requestXmlBodys as $id => $requestXmlBody) {
			$connection [$id] = curl_init ();
			curl_setopt ( $connection [$id], CURLOPT_URL, $this->EBAY_server );
			curl_setopt ( $connection [$id], CURLOPT_SSL_VERIFYPEER, "0" );
			curl_setopt ( $connection [$id], CURLOPT_SSL_VERIFYHOST, "0" );
			curl_setopt ( $connection [$id], CURLOPT_HTTPHEADER, array ( "X-EBAY-API-COMPATIBILITY-LEVEL: 543", "X-EBAY-API-DEV-NAME: " . $this->EBAY_devID, "X-EBAY-API-APP-NAME: " . $this->EBAY_appID, "X-EBAY-API-CERT-NAME: " . $this->EBAY_certID, "X-EBAY-API-CALL-NAME: " . $this->EBAY_call, "X-EBAY-API-SITEID: 77" ) );
			curl_setopt ( $connection [$id], CURLOPT_POST, true );
			curl_setopt ( $connection [$id], CURLOPT_POSTFIELDS, $requestXmlBody );
			curl_setopt ( $connection [$id], CURLOPT_RETURNTRANSFER, true );
			curl_multi_add_handle ( $multiconnection, $connection [$id] );
		}
		do {
			curl_multi_exec ( $multiconnection, $handle );
		} while ($handle > "0");
		$responseXmlBodys = array ();
		foreach ($requestXmlBodys as $id => $requestXmlBody) {
			array_push ( $responseXmlBodys, curl_multi_getcontent ( $connection [$id] ) );
			curl_multi_remove_handle ( $multiconnection, $connection [$id] );
		}
		curl_multi_close ( $multiconnection );
		return $responseXmlBodys;
	}
 
Ich habe nun meinen Code so umgebaut, wie von Michael vorgeschlagen.

Als Fehler erhalte ich (obwohl die gleichen Parameter wie zuvor mit CURL übergeben werden):

HTTP/1.1 200 OK Date: Mon, 28 Jun 2010 19:22:56 GMT Server: Microsoft-IIS/5.0 X-EBAY-API-POOL-NAME: ___cDRidW90YmtiZWx9b2l3aQ== X-EBAY-API-SERVER-NAME: ___dXYuc3F0YWR2bjM1NCgyNSgwLTQ2MS03Nj45PTY/Mg== Content-Type: text/xml Content-Length: 330 X-Cache: MISS from sjcsbapigw01.sjc.ebay.com, MISS from sjcsbapigw01.sjc.ebay.com Connection: close 2010-06-28 19:22:562RequestError1SeriousError00

Was mache ich falsch?

PHP:
public function sendHttpRequest($requestXmlBodys) {
		foreach ($requestXmlBodys as $id => $requestXmlBody) {
			$connection = fsockopen ( "ssl://api.sandbox.ebay.com", "443" );
			$header = "POST /ws/api.dll HTTP/1.0\r\n";
			$header .= "Connection: Close\r\n\r\n";
			$header .= "Content-Type: text/xml\r\n\r\n";
			$header .= "Content-Length: " . strlen ( $requestXmlBody ) . "\r\n\r\n";
			$header .= "X-EBAY-API-COMPATIBILITY-LEVEL: 543\r\n";
			$header .= "X-EBAY-API-DEV-NAME: " . $this->EBAY_devID . "\r\n";
			$header .= "X-EBAY-API-APP-NAME: " . $this->EBAY_appID . "\r\n";
			$header .= "X-EBAY-API-CERT-NAME: " . $this->EBAY_certID . "\r\n";
			$header .= "X-EBAY-API-CALL-NAME: " . $this->EBAY_call . "\r\n";
			$header .= "X-EBAY-API-SITEID: 77\r\n\r\n";
			if ($connection == true) {
				fputs ( $connection, $header . $requestXmlBody );
				while (feof ( $connection ) == false) {
					$responseXmlBody .= fgets ( $connection, "1024" );
				}
				$responseXmlBodys [$id] = $responseXmlBody;
				fclose ( $connection );
			}
		}
		return $responseXmlBodys;
	}
 
Zuletzt bearbeitet:
Zurück