php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 22-10-2014, 12:38
hansflorian
 Registrierter Benutzer
Links : Onlinestatus : hansflorian ist offline
Registriert seit: Oct 2014
Beiträge: 5
hansflorian befindet sich auf einem aufstrebenden Ast
Standard Ein data POST via Curl funktioniert nicht.

Hallo Profis,

ich habe ein Problem bei einem kleinen PHP Projekt. Ich schreibe aktuell die Funktionen für ein Webfrontend über welches ich die REST API einer Software ansteuern möchte. Erst logge ich mich mit CURL "in der Software ein" und speicher einen cookie. In einem zweiten Schritt möchte ich "in der Software" als Authorisierter User Projekte anlegen. Der Hersteller gibt mir folgendes vor:

curl -v \
-b cookie.txt \
-X POST \
-H "Content-Type: application/json" \
-d '{"name": "myProjectName", "description": "123456789"}' \
http://localhost/projekt.json

Wenn ich diesen Curlbefehl (nach dem Login über Curl) über das Terminal ausführe, funktioniert alles wie gewünscht. Über PHP bekomme ich das aber nicht hin.

PS: Habe den Code geändert:
PHP-Code:
////////////////////////////////////////////////////////////////////
// Create Production
////////////////////////////////////////////////////////////////////
$url "http://testserver/projekt.json";

$ch curl_init(); 

// read and edit Cookie from txt 
$handle fopen($cookie'r');
$contents fread($handlefilesize($cookie));
fclose($handle);

$token str_replace("\t"'='substr($contentsstrpos($contents'login-token')));

//curl options
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse); // Accepts all CAs 
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_CUSTOMREQUESTPOST);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue); 
curl_setopt($chCURLOPT_POSTtrue);
curl_setopt($chCURLOPT_VERBOSEtrue);
curl_setopt($chCURLOPT_HEADERtrue);
curl_setopt($chCURLOPT_CRLFtrue);
curl_setopt($chCURLINFO_HEADER_OUTtrue);

//Post data as json
$data json_encode(array(
    
'name' => 'Namederproduction',
  
'description' => 'Beschreibungderproduction'
    
));

curl_setopt($chCURLOPT_POSTFIELDS$data);

//header
$header = array('Cookie: '.$token,
'Content-Length: '.strlen($data),
'Content-Type: application/json;charset=UTF-8',
'Accept: application/json;charset=UTF-8');

curl_setopt($chCURLOPT_HTTPHEADER$header);

$output curl_exec($ch);

curl_close($ch);

return 
$output
Ich sitze an dem Problem jetzt schon einige Zeit und wage jetzt den Schritt im Forum nachzufragen. Vielleicht hat ja einer von euch ne gute Idee.

Lieben Gruß aus Köln

Geändert von hansflorian (24-10-2014 um 10:32 Uhr) Grund: Code angepasst
Mit Zitat antworten
  #2 (permalink)  
Alt 22-10-2014, 21:24
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

REST ist zustandslos, es gibt also kein Login mittels Session oder Cookie. Also egal, was du da hast, es ist kein REST.

Hast du schon mal geschaut, ob das Cookie-File überhaupt angelegt wird und was es enthält?
Mit Zitat antworten
  #3 (permalink)  
Alt 23-10-2014, 11:03
hansflorian
 Registrierter Benutzer
Links : Onlinestatus : hansflorian ist offline
Registriert seit: Oct 2014
Beiträge: 5
hansflorian befindet sich auf einem aufstrebenden Ast
Standard

Hallo, das Cookiefile wird angelegt.

HTML-Code:
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_testserver.com	 FALSE	/	FALSE	0	login-token	9ed6270b-0e7e-42dc-8df4-7e6f5f08c278%3a23edd5f3-77e7-4f9e-a161-05f2870b9651_0098d925fc17dfd1%3acrx.default
Mittlerweile bekomme ich statt einem Authorisierungsfehler 401 einen Bad Request 400. Ich ziehe mir den login-token aus der txt, speicher ihn zwischen und füge ihn manuell als Cookie in den header. Scheint zu klappen.

Laut API bedeutet der Fehler 400:
HTML-Code:
400 Bad Request	A required property is missing in the request body.
Wenn ich mir den BODY ausgebe:
HTML-Code:
BODY: java.lang.IllegalArgumentException: The validated object is null...........
Wenn ich mir die json encodierten POST daten ausgeben, erhalte ich :
HTML-Code:
{"name":"Namederproduction"}
also in der selben Form, wie ich auch im Terminal die Daten übergebe. (siehe oben CURL Befehl) Die Description welche ich im oberen Beispiel noch als Data übergeben habe wird laut API nicht required.

Scheinbar bleibt der Body leer.

Hast du ne Idee ? Gibts da nen Trick ?
Mit Zitat antworten
  #4 (permalink)  
Alt 23-10-2014, 11:20
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von hansflorian Beitrag anzeigen
Wenn ich mir die json encodierten POST daten ausgeben, erhalte ich :
Das heißt, du encodest die empfangenden Daten erst auf Serverseite als JSON, um diese Ausgabe zu erhalten?

Sieht so aus, als ob du gar kein JSON sendest –
PHP-Code:
curl_setopt($chCURLOPT_POSTFIELDS$data); 
– das erzeugt nicht automagisch JSON aus dem Inhalt deines Arrays.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 23-10-2014, 11:40
hansflorian
 Registrierter Benutzer
Links : Onlinestatus : hansflorian ist offline
Registriert seit: Oct 2014
Beiträge: 5
hansflorian befindet sich auf einem aufstrebenden Ast
Standard

Der Code oben ist nun aktualisiert.

PHP-Code:
$data json_encode(array(
    
'name' => 'Namederproduction',
  
'description' => 'Beschreibungderproduction'
    
)); 
So hab ich aus den Daten ein Json gemacht.

Ich habe Probleme, den doch recht simplen Curl Befehl in PHP zu übersetzen

Geändert von hansflorian (23-10-2014 um 14:11 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 23-10-2014, 21:11
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Du setzt nicht den Content-Type. Den solltest du auf application/json setzen, wenn du JSON-Daten sendest.

http://www.lornajane.net/posts/2011/...-with-php-curl
Mit Zitat antworten
  #7 (permalink)  
Alt 24-10-2014, 10:35
hansflorian
 Registrierter Benutzer
Links : Onlinestatus : hansflorian ist offline
Registriert seit: Oct 2014
Beiträge: 5
hansflorian befindet sich auf einem aufstrebenden Ast
Standard

Danke, das habe ich beim "kürzen" des Codes für den Forumspost versehentlich abgeschnitten.
Den $header den ich definiere verwende ich auch. Danke aber für den Hinweis. Ich hab's oben angepasst.
Mit Zitat antworten
  #8 (permalink)  
Alt 24-10-2014, 17:36
hansflorian
 Registrierter Benutzer
Links : Onlinestatus : hansflorian ist offline
Registriert seit: Oct 2014
Beiträge: 5
hansflorian befindet sich auf einem aufstrebenden Ast
Standard

HTML-Code:
curl -v \
     -b cookie.txt \
     -X POST \
     -F ':parameters={"destination": "http://localhost/project.json", "mediaPaths": ["media://file.mxf"], "comment": "Kommentar"}' \
     http://localhost/projekt.v1.json
Wisst ihr was :parameters bedeutet ?
Also speziell der Doppelpunkt.

PHP-Code:
//Build the MediaPaths Array
$mediaPaths_array = array('media://file.mxf');

//Json_Encode the MediaPaths Array
$data_encode json_encode(array(
    
'destination' => 'http://localhost/project.v1.json',
    
'mediaPaths' => $mediaPaths_array,
    
'comment' => 'Kommentar'
  
), JSON_UNESCAPED_SLASHES);

//Built Data for Post
$data ':parameters='.$data_encode
Das :parameters habe ich mir bisher vor den encodierten Daten geschrieben. Scheint aber der falsche Weg zu sein ?!

Ne Idee ?
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
api, curl, json, post, rest


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
cURL - einfaches Formular ausfüllen funktioniert nicht einermeiner PHP Developer Forum 10 15-06-2011 21:01
Login per curl auf Webseite funktioniert nicht stony2k PHP Developer Forum 11 09-04-2010 11:25
CURL: Form abschicken funktioniert nicht. TriphunEM PHP Developer Forum 5 01-02-2009 18:04
ODBC Abfrage via Formular funktioniert nicht bsailer PHP Developer Forum 3 24-11-2005 00:54
Post und Get funktioniert nicht TheDesigner PHP Developer Forum 2 29-03-2003 18:25

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:52 Uhr.