SHARE
TWEET

vk ssl+

msangel Feb 25th, 2013 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. header('Content-Type: text/html;charset=UTF-8'); // это  для нормального вывода
  3.  
  4.  
  5. function curl($url, $post_data=false, $referer = false){
  6.  
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL,$url);
  9. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // убирает проблему "HTTP/1.1 100 Continue", когда нам в ответе приходит первый дополнительный заголовок "Expect: 100-continue" который с одной стороны позволяет библиотеке узнать что соединение еще не сброшено, с другой - мешает нам нормально поделить ответ на заголовок. фактически здесь мы устанавливаем пустое значение этому заголовку запроса, тем самым перетирая дефолтное значение библиотеки и убираем его
  10. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  11. curl_setopt($ch, CURLOPT_HEADER, true);
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  13. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
  14.  
  15.  
  16. if($post_data!==false){// если указанные POST параметр - устанавливаем тип запрса POST и передаем параметры
  17.   curl_setopt($ch, CURLOPT_POST, true);
  18.   curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  19. }
  20.  
  21. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // не следовать за перенаправдением(потому что в данном случае кикисы нужно сграбить с той странички, которая перенаправляет, что не очень удобно)
  22.  
  23. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
  24. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  25. curl_setopt($ch, CURLOPT_CAINFO, getcwd() ."/ffchainvk.crt"); //  ok
  26.  
  27. if($referer!==false) {
  28.   curl_setopt($ch, CURLOPT_REFERER, $referer);
  29. }
  30.  
  31.  
  32. $response = curl_exec ($ch);
  33.   if(!curl_errno($ch)){ // если нет ошибки(код ошыбки: 0)
  34.     $info = curl_getinfo($ch); // получаем всю мета инфу по запросу - скорость, время, размер и т.д.
  35.   } else {
  36.     die ('Curl error: ' . curl_error($ch)); // иначе получаем текстовое описание ошибки
  37.   }
  38.  
  39.  
  40. // print_r($response);
  41. list($header, $body) = explode("\r\n\r\n", $response, 2);// не использовать curl_getinfo($ch, CURLINFO_HEADER_SIZE); для определения размера заголовка - это значение может быть неверным. с другой стороны использованный подход для разделения ответа на заголовок и тело гарантированно протоколом http
  42.  
  43. $ansv = array("body"=>$body, "url"=>$url);
  44.  
  45. if(preg_match('/Location: (.+)/i', $header, $res) ){
  46. $ansv['location']= trim($res[1]);
  47. }
  48.  
  49. return $ansv;
  50.  
  51. }
  52.  
  53.  
  54. // пример использования https://api.vk.com/method/getProfiles?uids=5216087
  55.  
  56. echo "<a href='https://api.vk.com/method/getProfiles?uids=5216087' target='_blank'>https://api.vk.com/method/getProfiles?uids=5216087</a>\n<br/>";
  57.  
  58. $first =curl("https://api.vk.com/method/getProfiles?uids=5216087");
  59. echo $first['body'];
  60.  
  61.  
  62. ?>
RAW Paste Data
Top