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 :: Premature end of file

 PHP.SU

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


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

> Описание: почему ругается на валидный XML?
Proffessional
Отправлено: 19 Мая, 2011 - 09:58:31
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




Хочу отправить сообщение с помощью Atom Publishing Protocol. Создаю xml:
PHP:
скопировать код в буфер обмена
  1. $atom = new DOMDocument('1.0', 'UTF-8');
  2.  
  3. $atom_entry = $atom->createElement('entry');
  4. $atom_entry->setAttribute('xmlns', 'http://www.w3.org/2005/Atom');
  5. $atom->appendChild($atom_entry);
  6.  
  7. $atom_title = $atom->createElement('title');
  8. $atom_title->setAttribute('type', 'text');
  9. $atom_entry->appendChild($atom_title);
  10. $atom_title_content = $atom->createTextNode($subject);
  11. $atom_title->appendChild($atom_title_content);
  12.  
  13. $atom_content = $atom->createElement('content');
  14. $atom_content->setAttribute('type', 'xhtml');
  15. $atom_entry_content=$atom->createTextNode($entry);
  16. $atom_content->appendChild($atom_entry_content);
  17. $atom_entry->appendChild($atom_content);
  18.  
  19. $atomMessage = $atom->saveXML();

результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <entry xmlns="http://www.w3.org/2005/Atom"><title type="text">Test</title><content type="xhtml">Test!</content></entry>

значит, всё правильно. Отправляю на Blogger.com. Вот что выдаётся -
CODE (htmlphp):
скопировать код в буфер обмена
  1. Content-Type: text/html; charset=UTF-8
  2. Date: Thu, 19 May 2011 06:49:13 GMT
  3. Expires: Thu, 19 May 2011 06:49:13 GMT
  4. Cache-Control: private, max-age=0
  5. X-Content-Type-Options: nosniff
  6. X-XSS-Protection: 1; mode=block
  7. Server: GSE
  8. Transfer-Encoding: chunked
  9.  
  10. Premature end of file.

Ребята, помогите понять, что не так? Почему мой xml, совершенно правильно созданный, оказывается незавершённым? Ниндзя


-----
<?php ?> - идеальная программа на php
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 11:04:09
Post Id



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


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


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




Скорее проблема в отправке или получатель требует какие-то ещё поля, кроме титла и контента.


-----
PostgreSQL DBA
 
 Top
Proffessional
Отправлено: 19 Мая, 2011 - 11:08:13
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




В документации http://code[dot]google[dot]com/intl/ru/a[dot][dot][dot]ingPublicEntries
пример как раз такой. Я и с тегом category пробовал, результат тот же
CODE (htmlphp):
скопировать код в буфер обмена
  1. <entry xmlns='http://www.w3.org/2005/Atom'>
  2.   <title type='text'>Marriage!</title>
  3.   <content type='xhtml'>
  4.     <div xmlns="http://www.w3.org/1999/xhtml">
  5.       <p>Mr. Darcy has <em>proposed marriage</em> to me!</p>
  6.       <p>He is the last man on earth I would ever desire to marry.</p>
  7.       <p>Whatever shall I do?</p>
  8.     </div>
  9.   </content>
  10.   <category scheme="http://www.blogger.com/atom/ns#" term="marriage" />
  11.   <category scheme="http://www.blogger.com/atom/ns#" term="Mr. Darcy" />
  12. </entry>


-----
<?php ?> - идеальная программа на php
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 11:20:44
Post Id



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


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


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




А отправляете как?


-----
PostgreSQL DBA
 
 Top
Proffessional
Отправлено: 19 Мая, 2011 - 11:36:51
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




Мелкий пишет:
А отправляете как?

'Content-type: application/atom+xml',
'Content-Length:'.$length,
'Authorization: GoogleLogin auth='.$Cookie,

в post запросе отправляю xml, то есть:
PHP:
скопировать код в буфер обмена
  1. $length = strlen($postBody);
  2. $atomHeader = array(
  3.                                         'Content-type: application/atom+xml',
  4.                                         'Content-Length:'.$length,
  5.                                         'Authorization: GoogleLogin auth='.$Cookie,
  6.                                         );
  7.  
  8. curl_setopt($ch, CURLOPT_URL, 'https://www.blogger.com/feeds/'.$blogID.'/posts/default');
  9. curl_setopt($ch, CURLOPT_HEADER, true);
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, $postBody);


-----
<?php ?> - идеальная программа на php
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 12:23:55
Post Id



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


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


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




Ну, а дальше?
Здесь вы только объявили массив из 3 строк, никак их не использовав.

Пошлите данные другому своему скрипту, посмотрите, что и как приходит.


-----
PostgreSQL DBA
 
 Top
Proffessional
Отправлено: 19 Мая, 2011 - 12:47:10
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




Мелкий, извините, а как это сделать?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. $atom = new DOMDocument('1.0', 'UTF-8');
  2.  
  3. $atom_entry = $atom->createElement('entry');
  4. $atom_entry->setAttribute('xmlns', 'http://www.w3.org/2005/Atom');
  5. $atom->appendChild($atom_entry);
  6.  
  7. $atom_title = $atom->createElement('title');
  8. $atom_title->setAttribute('type', 'text');
  9. $atom_entry->appendChild($atom_title);
  10. $atom_title_content = $atom->createTextNode($subject);
  11. $atom_title->appendChild($atom_title_content);
  12.  
  13. $atom_content = $atom->createElement('content');
  14. $atom_content->setAttribute('type', 'xhtml');
  15. $atom_entry_content=$atom->createTextNode($entry);
  16. $atom_content->appendChild($atom_entry_content);
  17. $atom_entry->appendChild($atom_content);
  18.  
  19. $atomMessage = $atom->saveXML();
  20.  
  21. echo $atomMessage;
  22.  
  23. echo '<br>';
  24.  
  25. $length = strlen($postBody);
  26. $atomHeader = array(
  27.                                         'Content-type: application/atom+xml',
  28.                                         'Content-Length:'.$length,
  29.                                         'Authorization: GoogleLogin auth='.$Cookie,
  30.                                         );
  31. //stert session!
  32. curl_setopt($ch, CURLOPT_URL, 'https://www.blogger.com/feeds/'.$blogID.'/posts/default');
  33. curl_setopt($ch, CURLOPT_HEADER, true);
  34. curl_setopt($ch, CURLOPT_POSTFIELDS, $postBody);
  35. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  36. curl_setopt($ch, CURLOPT_HTTPHEADER, $atomHeader);
  37. curl_setopt($ch, CURLOPT_VERBOSE, true);
  38. $sendResult = curl_exec($ch);
  39. echo $sendResult;


$Cookie - это auth-token гугла, с ним всё правильно


-----
<?php ?> - идеальная программа на php
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 16:50:21
Post Id



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


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


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




CURLOPT_URL заменяете на url какого-то подконтрольного вам скрипта примерно такого содержания:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. var_dump($_POST,apache_request_headers()); // и ещё что-нибудь по вкусу

И смотрите, что вы таки отправили.


-----
PostgreSQL DBA
 
 Top
Proffessional
Отправлено: 19 Мая, 2011 - 18:13:01
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




Мелкий, я сделал через httpAnalyzer, получил такой header:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. POST /feeds/2415983713197246636/posts/default HTTP/1.1
  3. Host: www.blogger.com
  4. Accept: */*
  5. Content-type: application/atom+xml
  6. Content-Length:0
  7. Authorization: GoogleLogin auth=DQAAAJUAAADZ3dR9WzxwAw0R0QKjrzJkBJfy8_ErIwsaxuXeIr4yAFX7iVsZePeYb82jScLtoa8xOsPAJrmTZsrvNY5GYzBvUrbBTY9EjrBIRBamCmomOIS9aRi9W41DLBzDIYCb-om0e-6KlDRMcP_fh7FpSkBq3RJua_wDqohscjW-DVDGjFKXtyQ9AwtMZEcfPnmsim4xzAfj39RBSWX09klNm2ux
  8.  

И всё. Растерялся
(Добавление)
Почему-то он не передаёт xml. У!... Я уже столько написал, что мозги путаются в таких простых вещах!..


-----
<?php ?> - идеальная программа на php
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 19:31:09
Post Id



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


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


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




Proffessional, нашли ошибку, так понимаю? В CURLOPT_POSTFIELDS передаёте не то, что нужно.
И включите error_reporting в E_ALL | E_STRICT, PHP бы сразу сказал, в чём проблема.


-----
PostgreSQL DBA
 
 Top
Proffessional
Отправлено: 19 Мая, 2011 - 20:11:42
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




Извините, я наверное надоедлив.. Теперь post выглядит так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. POST /feeds/2415983713197246636/posts/default HTTP/1.1
  2. Host: www.blogger.com
  3. Accept: */*
  4. Content-type: application/atom+xml
  5. Content-Length:0
  6. Authorization: GoogleLogin auth=DQAAAJYAAADfPLX_-xYsXDmgOevur0msUfr5Gb581EVrPKv6B-3nWebiEGT320RZGKuytWgNfF2wFlhA_DO68kGBpX1U65XW0tOdAGqugoSi4ZfjfHYLns6V4GWHezuOxifLP5adeP33B7UZ8FNmNdv8ATMM8iLgJJcfnLkmVCT6RAx6-SLXnkYotgD8-naT6R1ZxaKzmN1jURNlGcSeE2y1LYRIzPUf
  7.  
  8.  
  9. <?xml version="1.0" encoding="UTF-8"?>
  10. <entry xmlns="http://www.w3.org/2005/Atom"><title type="text">Test</title><content type="xhtml">Test!</content></entry>
Ответ сервера такой же. Теперь уже совсем не понятно в чём проблема...


-----
<?php ?> - идеальная программа на php
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 20:25:46
Post Id



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


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


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




Proffessional пишет:
Content-Length:0

Меня вот это несколько смущает.

Ну и покурите поиск гугла, должны быть маны и более развёрнутые и с другими примерами.


-----
PostgreSQL DBA
 
 Top
Proffessional
Отправлено: 19 Мая, 2011 - 21:30:24
Post Id



Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Апр. 2011  
Откуда: Москва, Россия


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




Мелкий пишет:
Proffessional пишет:
Content-Length:0

Меня вот это несколько смущает.

Ну и покурите поиск гугла, должны быть маны и более развёрнутые и с другими примерами.

Исправил. Теперь пришёл к изначальной ошибке, первой из всей этой череды:
CODE (htmlphp):
скопировать код в буфер обмена
  1. The processing instruction target matching "[xX][mM][lL]" is not allowed.

Как я знаю, это сообщение выводит Java когда перед открытием xml есть что-то ещё, хоть один пробел. Но здесь его нету (я же не зря использовал new DOMDocument?). Что же это может быть?

Да, извините, мне никак не повысить Вам репутацию, не разрешают Ниндзя


-----
<?php ?> - идеальная программа на php
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« XML и его обработка »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB