文字

curl 基础例子

只要你编译完的PHP设置了支持cURL扩展,你就可以开始使用cURL函数了。使用cURL函数的基本思想是先使用 curl_init() 初始化一个cURL会话,接着你可以通过 curl_setopt() 设置你需要的全部选项,然后使用 curl_exec() 来执行会话,当执行完会话后使用 curl_close() 关闭会话。这是一个使用cURL函数获取example.com的主页保存到文件的例子:

Example #1 使用PHP的cURL模块获取example.com的主页

<?php

$ch 
curl_init ( "http://www.example.com/" );
$fp  fopen ( "example_homepage.txt" "w" );

curl_setopt ( $ch CURLOPT_FILE $fp );
curl_setopt ( $ch CURLOPT_HEADER 0 );

curl_exec ( $ch );
curl_close ( $ch );
fclose ( $fp );
?>

用户评论:

[#1] Roberto Braga [2015-04-01 09:45:41]

It is important to notice that when using curl to post form data and you use an array for CURLOPT_POSTFIELDS option, the post will be in multipart format

<?php
$params
=['name'=>'John''surname'=>'Doe''age'=>36)
$defaults = array(
CURLOPT_URL => 'http://myremoteservice/'
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
);
$ch curl_init();
curl_setopt_array($ch, ($options $defaults));
?>

This produce the following post header:

--------------------------fd1c4191862e3566
Content-Disposition: form-data; name="name"

Jhon
--------------------------fd1c4191862e3566
Content-Disposition: form-data; name="surnname"

Doe
--------------------------fd1c4191862e3566
Content-Disposition: form-data; name="age"

36
--------------------------fd1c4191862e3566--

Setting CURLOPT_POSTFIELDS as follow produce a standard post header

CURLOPT_POSTFIELDS => http_build_query($params),

Which is:
name=John&surname=Doe&age=36

This caused me 2 days of debug while interacting with a java service which was sensible to this difference, while the equivalent one in php got both format without problem.

[#2] Anon [2014-02-18 11:16:10]

IMO this example would have been better if it had done a check for curl_error(), in order to advertize the existence of this function to people learning about cURL who try the example but mysteriously get no response back for whatever reason.

[#3] Anon [2014-02-18 10:25:21]

The example fetches a resource (the homepage of a website) and writes it to the the file represented by $fp.

Judging from comments elsewhere in this chapter, the example given ought to set CURLOPT_RETURNTRANSFER to true prior to setting CURLOPT_FILE.

[#4] simon dot riget at gmail dot com [2013-04-30 10:23:05]

Using ArangoDB with PHP

Coding with a NoSQL data base like ArangoDB can be made more complicated then need be. A simple solution to code for ArangoDB is to use the REST interface directly.
All you need is a few initialization variables and a small function to ease the typing - and of cause install the php5-curls module... 
See ArangoDB REST API documentation for options and request types.

<?php
// Initialize options for REST interface
$adb_url="http://127.0.0.1:8529";
$adb_option_defaults = array(
    
CURLOPT_HEADER => false,
    
CURLOPT_RETURNTRANSFER => true,
    
CURLOPT_TIMEOUT => 2
  
); 

// ArangoDB REST function.
// Connection are created demand and closed by PHP on exit.
function adb_rest($method,$uri,$querry=NULL,$json=NULL,$options=NULL){
  global 
$adb_url,$adb_handle,$adb_option_defaults;

  
// Connect 
  
if(!isset($adb_handle)) $adb_handle curl_init();

  echo 
"DB operation: $method $uri $querry $json\n";

  
// Compose querry
  
$options = array(
    
CURLOPT_URL => $adb_url.$uri."?".$querry,
    
CURLOPT_CUSTOMREQUEST => $method// GET POST PUT PATCH DELETE HEAD OPTIONS 
    
CURLOPT_POSTFIELDS => $json,
  ); 
  
curl_setopt_array($adb_handle,($options $adb_option_defaults)); 

  
// send request and wait for responce
  
$responce =  json_decode(curl_exec($adb_handle),true);

  echo 
"Responce from DB: \n";
  
print_r($responce);
  
  return(
$responce);
}
?>


Here's some examples:

<?php
// Create a collection
$responce adb_rest("POST","/_api/collection","",'{"name" : "test"}');

// Create a document 
$responce adb_rest("POST","/_api/document","collection=test",'{ "hello" : "World" }');

// List documents in a collection
$responce=adb_rest("GET","/_api/document","collection=test");

// Change document
$document_handle=$responce['documents'][0];
$responce=adb_rest("PATCH",$document_handle,"",'{ "hello" : "World of mine" }');

// Show document
$responce=adb_rest("GET",$document_handle);

// Search
$responce=adb_rest("POST","/_api/cursor","",'{ 
  "query" : "FOR t IN test RETURN t",
  "count" : true,
  "batchSize" : 50
}'
);

while(
$responce['hasMore'])
  
$responce=adb_rest("PUT","/_api/cursor/".$responce['id']);

// Delete document
$responce=adb_rest("DELETE",$document_handle);

// DB Delete collection
$responce=adb_rest("DELETE","/_api/collection/test");

// to handle errors, add something like this:
if($responce['error']) die ("can't create collection");

?>

上一篇: 下一篇: