Προς το περιεχόμενο

Curl http request grab data


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδία,

Ξεκίνησα να χρησιμοποιώ curl για να http request για ενα application. Αυτό που δεν μπορώ να καταλάβω είναι το εξής:
1) Στην σελίδα που δηλώνουμε στο url πως μπορώ να διαχειριτώ αυτά που έχω κάνει Post.  Πως μπορώ δηλαδή κάπου να καλέσω το
 item1 => 'value',
 item2 => 'value2'
είτε για εγγραφή σε μια βάση είτε για εκτέλεση κάποιας λειτουργίας.
2) Αν στο server side script υπάρχει η δυνατότητα για κάποιο redirection αντί να παραμείνω στην σελίδα που ήταν το curl


// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://testcURL.com'
    CURLOPT_USERAGENT => 'Codular Sample cURL Request',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => array(
        item1 => 'value',
        item2 => 'value2'
    )
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);

Ευχαριστώ πολύ εκ των προτέρων

Δημοσ.

Όπως βλέπω δουλεύεις σε php.

Στον destination-server Μπορείς να πάρεις τις μεταβληπές που στέλνεις από το array $_POST (πχ $_POST['item1'] κτλ..)

Απο τη στιγμή που κλείνεις την σύνδεση και δεν χρησιμοποιείς την απάντηση που σου επέστρεψε ο server δεν κάνει τίποτα άλλο το πρόγραμμά σου, ανεξάρτητα τι κάνει ο destination-server σε ένα άλλο πρόγραμμα-πελάτη (πχ έναν browser).

Δημοσ.

Ακριβώς είναι σε php. Ωστόσο στο server side script κάνωντας χρήση του $_POST δεν γίνεται τίποτα απολύτως. Είτε αυτό είναι εγγραφή σε βάση είτε απλά ανάθεση μιας τιμής σε ένα session. Θα μπορούσες να μου πεις πως θα φέρω την τιμή που επέστρεψε ο server στο αρχικό script;

Ευχαριστώ πολύ

 

 

<?php  session_start();
if(isset($_POST['item1'],$_POST['item2'])){
    $db = new mysqli('connection info');
    $item1 = $db->real_escape_string($_POST['item1']);
    $item2 = $db->real_escape_string($_POST['item2']);
    $query = "insert into users set username='$item1 ,$item2'";
    $db->query($query)
}
?>

Δημοσ.

Έχεις δυνατότητα εκτέλεσης ncat στον server σου να δείς τι ακριβώς λαμβάνει; Είναι κάποιο shared hosting με virtual hosts? Μήπως πρέπει να προσθέσεις την παράμετρο HOST: στις κεφαλίδες; Επίσης μπορείς να τυπώσεις με μια print_r() τα αποτελέσματα τις curl_exec μήπως σου δώσει κάποια πληροφορία.

Δημοσ.

Μα αφού δεν έχεις πουθενά στον κώδικα σου να επιστρέφει ο server μια απάντηση, γι αυτό δεν πέρνεις απάντηση.
Στο κώδικα του πρώτου σου post στέλνεις το request στο server και στο 2ο διάβαζει ο server το request. Οπότε  πρέπει αρχικά να βάλεις ο server να επιστρέφει κάτι (συνήθως κάποιο json) αφού τελειώσεις το query πχ:

$response = array();
$response['item1'] = "Value of item1";
$response['item2'] = "Value of item2";

//encode response into json
$json_response = json_encode($response);
echo $json_response;

Και τώρα στον client αφού διβάζεις την απάντηση με το:

//get response
$resp = curl_exec($curl);

//decode json
$result = json_decode($resp);

//get the value of item1 from $result
$item1_resp = $result->item1;

//get the value of item2 from $result
$item2_resp = $result->item2;
  • Like 1
Δημοσ.

Αν κατάλαβα καλά κάτι τέτοιο χρειάζεσε:

 

$url= "YOUR_URL";
$ch1 = curl_init();
$post_value = "value1=VALUE1&value2=VALUE2";
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
				
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_POSTFIELDS,$post_value);
curl_setopt($ch1, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch1);
$info = curl_getinfo($ch1);
curl_close($ch1);
//To $output περιέχει πλέον τα δεδομένα σε json υποθέτω. Τα κανεις decode και είσαι άρχοντας
$result = json_decode($output);
echo "<pre>";
print_r($output);
echo "</pre>";


Υ.Γ. Για να βγάζεις άκρη και να τεστάρεις API call πιο εύκολα θα σου πρότεινα να δοκιμάζεις τις κλήσεις σου στο hurl.it για παράδειγμα πριν αρχίσεις να γράφεις curl calls, ώστε να βλέπεις αν το API αρχικά λειτουργεί σωστά. Και αφού λειτουργεί σωστά να πιανεις την άλλη πλευρά της επικοινωνίας. 

Με λίγα λόγια σπάσε το πρόβλημά σου σε κομμάτια και λύνε το ένα ένα.

Διαίρει και Βασίλευε, όπως έλεγε και ο παππούς μου :-P

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...