Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Curl и Content-Type: multipart/form-data [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: как передать параметры ?
Delovoy
Отправлено: 02 Июня, 2011 - 15:49:39
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




попробовал
PHP:
скопировать код в буфер обмена
  1. $cookies = $_SERVER['DOCUMENT_ROOT'].'/cookie.txt';
  2.  
  3.  
  4. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
  5. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
  6.  
  7.  
  8. echo 'происходит создание куки = '.$cookies;


в результате в браузере вижу надпись
происходит создание куки = Z:/home/localhost/www/cookie.txt
по указанному пути файл отсутствует

его надо предварительно создать вручную ?

Спасибо вамOrmaJever, за помощь, со мной не так просто наверное!!!
 
 Top
Мелкий Супермодератор
Отправлено: 02 Июня, 2011 - 16:23:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Проверьте права, этот код должен отдать 2 true.
PHP:
скопировать код в буфер обмена
  1. var_dump(is_writable($_SERVER['DOCUMENT_ROOT'].'/cookie.txt'),is_writable($_SERVER['DOCUMENT_ROOT']));


Вернее, если создать файл cookie.txt, то вторая проверка может быть и false, но первая должна быть true.

(Отредактировано автором: 02 Июня, 2011 - 16:24:15)



-----
PostgreSQL DBA
 
 Top
Delovoy
Отправлено: 03 Июня, 2011 - 10:10:05
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




попробовал, получил не совсем логичный ответ

Цитата:
bool(false) bool(true)


т.е. я так понимаю, что директория $_SERVER['DOCUMENT_ROOT'] доступна для записи, а $_SERVER['DOCUMENT_ROOT'].'/cookie.txt' нет

попробовал изменить на всякий случай имя файла, но результат прежний ...
что еще попробовать ?
 
 Top
Мелкий Супермодератор
Отправлено: 03 Июня, 2011 - 15:09:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Разбирайтесь/гуглите с виндовыми правами доступа, ОС не разрешает скрипту записать файл..


-----
PostgreSQL DBA
 
 Top
Delovoy
Отправлено: 03 Июня, 2011 - 16:11:51
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




попробовал еще один вариант

PHP:
скопировать код в буфер обмена
  1. $cookies ='cookie.txt';
  2.  
  3. if (substr(PHP_OS, 0, 3) == 'WIN')
  4.         {
  5.                 $cookies  = str_replace('\\','/', getcwd().'/'.$cookies );
  6.         }


получаю путь
Z:/home/localhost/www/MegaProm/include/cookie.txt
но файла по этому пути все равно нет ...
пошел в google ...

потом решил попробовать самый простой вариант

PHP:
скопировать код в буфер обмена
  1. $cookies ='cookie.txt';
  2.  
  3. if (substr(PHP_OS, 0, 3) == 'WIN')
  4.         {
  5.                 $cookies  = str_replace('\\','/', getcwd().'/'.$cookies );
  6.         }
  7.        
  8. $dst = fopen($cookies, 'w'); // 'w' указывает функции открыть файл для записи      
  9. fputs($dst, 'Это тестовая кука');
  10. fclose($dst);
  11.  


и о чудо! файл по этому пути создается! значит с правами на запись все ОК!
хм ...тогда где же куки ?
ну которые реальные, с сайта
я правильно понимаю, что если файл создался - значит с правами все ок и вопрос в том, что сделать, чтобы получить куки ?

привел на всякий случай свой код, может где-то в другом месте делаю ошибку
уже не знаю на ЧТО думать ...

PHP:
скопировать код в буфер обмена
  1.  
  2. // инициализация сеанса
  3. $ch = curl_init();
  4.  
  5. // установка URL и других необходимых параметров
  6. curl_setopt($ch, CURLOPT_URL, "http://slando.com.ua/post/?category_id=11035&type=1");
  7.                                
  8. // установка метода передачи параметров
  9. //curl_setopt($ch, CURLOPT_POST, 0);
  10.  
  11. // установка браузера
  12. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5");
  13.  
  14.  
  15. // добавляем заголовков к нашему запросу. Чтоб смахивало на настоящего пользователя :)
  16. $headers = array
  17.     (
  18.     'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  19.     'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
  20.     'Accept-Encoding: deflate',
  21.     'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'
  22. );
  23.  
  24.  
  25. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  26.  
  27.  
  28. // Подделываем значение - откуда пришли данные.
  29. curl_setopt($ch, CURLOPT_REFERER, "http://slando.com.ua/post/");
  30.  
  31.  
  32. // Функции для обработки установливаемых сайтом кук.
  33. $cookies ='cookie.txt';
  34.  
  35. if (substr(PHP_OS, 0, 3) == 'WIN')
  36.         {
  37.                 $cookies  = str_replace('\\','/', getcwd().'/'.$cookies );
  38.         }
  39.        
  40. $dst = fopen($cookies, 'w'); // 'w' указывает функции открыть файл для записи      
  41. fputs($dst, 'Это тестовая кука');
  42. fclose($dst);
  43.        
  44. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
  45. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
  46.  
  47.  
  48. // разрешить переадресацию
  49. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  50.  
  51.  
  52. // выводит переменную
  53. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  54.  
  55. //настройка SSL
  56. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  57. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  58.  
  59.  
  60. // загрузка страницы и выдача её браузеру
  61. $out = curl_exec($ch);
  62.  
  63.  
  64. // отображение информации об ошибках работы cURL
  65. echo "\n\ncURL error number:" . curl_errno($ch) . " <br/>";
  66. echo "\n\ncURL error:" . curl_error($ch) . " <br/>";
  67.  
  68. echo 'создана кука = '.$cookies.'<br>';
  69.  
  70. // завершение сеанса и освобождение ресурсов
  71.  
  72. return $out;
  73.  




спасибо за помощь, мужики!

(Отредактировано автором: 03 Июня, 2011 - 16:29:28)

 
 Top
Delovoy
Отправлено: 06 Июня, 2011 - 09:31:32
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




обдумал за выходные все еще раз и понял что возможно, я ушел в сторону он основного вопроса ...

как я писал раньше, удается получить ответ от сервера на свой пост запрос, но в слабо читаемой форме

Цитата:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<TITLE>������: ����������� URL �� ����� ���� ���������</TITLE>
<STYLE type="text/css"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}PRE{font-family:sans-serif}--></STYLE>
</HEAD><BODY>
<H1>������</H1>
<H2>����������� URL �� ����� ���� ���������.</H2>
<HR noshade size="1px">
<P>
�� ����� ��������� �������:
<PRE>
POST /post/ HTTP/1.1
Proxy-Authorization: Basic a292YWxza2l5OmJlcmdoZWFz
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17
Host: slando.com.ua
Referer: http://slando[dot]com[dot]ua/post/?categ[dot][dot][dot]5&amp;type=1
Proxy-Connection: Keep-Alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Content-Length: -1
Content-Type: application/x-www-form-urlencode d
Expect: 100-continue

</PRE>

<P>
��������� ��������� ������:
<UL>
<LI>
<STRONG>
�������� ������.
</STRONG>
</UL>

<P>
��������� ������� HTTP ������� �����������. ��������� ��������:
<UL>
<LI>����������� ���� ���������� ����� ������� (GET, POST)
<LI>����������� URL
<LI>����������� HTTP ������������� (HTTP/1.0)
<LI>������ ������� �����
<LI>�� ������ Content-Length ��� �������� POST ��� PUT

<LI>������������ ������ � ����� �������; ������������� �����������
</UL>
</P>

<BR clear="all">
<HR noshade size="1px">
<ADDRESS>
Generated Wed, 01 Jun 2011 15:04:18 GMT by mx.cis.net.ua (squid/2.5.STABLE14)
</ADDRESS>
</BODY></HTML>
Загружено 1 <br/>
</body>
</html>


как это расшифровать ? возможно оно будет работать и без куков ? как это определить?
страницу с объявлением и капчу я получаю без всяких куков - там все работает!
 
 Top
Delovoy
Отправлено: 06 Июня, 2011 - 11:39:38
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




вывел с помощью функции curl_getinfo($ch) результат работы и нашел следующую вещь:

Цитата:
[http_code] => 411


нашел описание в Вики:
Цитата:
Для указанного ресурса клиент должен указать Content-Length в заголовке запроса. Без указания этого поля не стоит делать повторную попытку запроса к серверу по данному URI.


т.е. я должен добавить Content-Length в заголовок ? насколько я понимаю, curl сам его должен посчитать ?
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с сетью »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB