Jump to content


Обрезается запрашиваемая по llHTTPrequest страница


  • Please log in to reply
3 replies to this topic

#1 Mikhail Troncon

Mikhail Troncon

    Новичок на форуме

  • Пользователи
  • PipPip
  • 20 posts
  • Основной цех:Скриптеры
  • Второй цех:Строители
  • SL Status: 

Posted 26.01.08 - 10:17

Такая вот проблема: запрашиваю с вэбе страницу. Загружаются первые 13 строк (около 80 символов), причем 13-я строка грузится только наполовину ("никто не от" вместо "никто не ответил"). 14-я строка вообще не загружается в скрипт.
лслвики пишет что размер страницы ограничен 2048 байтами, т.е. дело видимо не в этом.

Quote

body is set to the body of the HTTP response as long as the response includes a "Content-Type" header specifying a text mime type. If a mime type is not specified or the type is not a text type, body is set to "Unsupported or unknown Content-Type." If the "Content-Type" header specifies a character set, body will be set to the body of the response transcoded to UTF-8, or to "Unsupported or unknown character set." if the character set is unsupported. The body is currently limited to 2048 bytes.


в чем может быть проблема?

Запрашиваю вэб-страницу этим lsl кодом:

default {
	state_entry() {
		httpphrase=llHTTPRequest(URLphrase, [] ,"");
	}

	http_response(key id,integer status, list meta, string body)
	{
		if(httpphrase==id)
		{
			integer i;
			list lbody=llParseString2List(body,["\n"],[]);
			integer count=llGetListLength(lbody);
			for(i=0;i<count;i++)
			{
				if (i==0){phrase_01 = llList2String(lbody,i);}
				else if (i==1){phrase_02 = llList2String(lbody,i);}
				else if (i==2){phrase_03 = llList2String(lbody,i);}
				else if (i==3){phrase_04 = llList2String(lbody,i);}
				else if (i==4){phrase_05 = llList2String(lbody,i);}
				else if (i==5){phrase_06 = llList2String(lbody,i);}
				else if (i==6){phrase_07 = llList2String(lbody,i);}
				else if (i==7){phrase_08 = llList2String(lbody,i);}
				else if (i==8){phrase_09 = llList2String(lbody,i);}
				else if (i==9){phrase_10 = llList2String(lbody,i);}
				else if (i==10){phrase_11 = llList2String(lbody,i);}
				else if (i==11){phrase_12 = llList2String(lbody,i);}
				else if (i==12){phrase_13 = llList2String(lbody,i);}
				else if (i==13){phrase_14 = llList2String(lbody,i);}
			}
		llOwnerSay("phrase_13 :" + phrase_13);
		llOwnerSay("phrase_14 :" + phrase_14);
		//meta=[];
		//body="";
		state stoped;
		}
	}
}

вывожу на сервере этим perl скриптом (если загружать не из lsl а через браузер - выдает все строки полностью):
#!/usr/bin/perl -w
print "Content-type: text/plain;charset=windows-1251\n\n";

print "Считаем до двух и поехали!\n";
print "Следующий вопрос: \n";
print ", правильно!!! Ответ: \n";
print "Подсказка: \n";
print "Время вышло. А ответ был: \n";
print "Игра остановлена. Включается через меню;)\n";
print " отменяет вопрос. А ответ был: \n";
print "Sorry, you have no access!\n";
print "Нет игроков - нет игры;)\n";
print "Ответ: \n";
print " отвечает на пять вопросов подряд\n";
print "Вопрос отменен.\n";
print "Никто не ответил.\n";
print "Победитель: \n";


#2 SOb Zemlja

SOb Zemlja

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

  • Главные администраторы
  • PipPipPipPip
  • 799 posts
  • Пол:М
  • Откуда:Россия, Москва
  • Основной цех:Строители
  • Второй цех:Скриптеры
  • SL Status: 

Posted 26.01.08 - 12:34

Попробовал воспроизвести…
Кинул себе на сервер скрипт на PHP.
Строки в LSL живут в UTF-8, так что с сервера можно смело отдавать текст в UTF-8.
В итоге нижеприведённый вариант у меня работает.

key reqid;
list lbody;

default {
	state_entry() {
		reqid = llHTTPRequest("http://www.slcontent.ru/tools/lsl.php", [] ,"");
	}

	http_response(key id, integer status, list meta, string body)
	{
		if (id != reqid)
			return;
		if (status == 499)
			llOwnerSay("timeout");
		else if (status != 200)
			llOwnerSay("other error");
		else
		{
			llOwnerSay(llList2String(lbody, 13));
		}
	}
}

P.S.: Скрипт всё ещё на сервере, можно пользоваться.

Edited by SOb_Zemlja, 26.01.08 - 12:37.


#3 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 26.01.08 - 12:52

для начала надо все таки убедится в размере
сразу после if(httpphrase==id)
вставить что нибудь вроде llStringLength(body) и посмотреть размер, и как вариант вывести не обработаную строку на экран и посмотреть что там на самом деле пришло

1251 на серверной стороне заменить на UTF-8 иначе придётся кодировать в эскейпы.

#4 Mikhail Troncon

Mikhail Troncon

    Новичок на форуме

  • Пользователи
  • PipPip
  • 20 posts
  • Основной цех:Скриптеры
  • Второй цех:Строители
  • SL Status: 

Posted 29.01.08 - 16:48

Скрипт

Ставлю:
print "Content-type: text/plain;charset=windows-1251\n\n";
получаю:

Quote

Game: Dlina poluchennogo koda: 305
Game: phrase_13 :Никто не от
Game: phrase_14 :Winner:
фраза 14 - это дефолтная английская, значит 14 строка вообще не загрузилась.

Кодирую текст в юникод, ставлю:
print "Content-type: text/plain;charset=UTF-8\n\n";
и получаю:

Quote

Game: Dlina pouchennogo koda: 325
Game: phrase_13 :Никто не ответил.
Game: phrase_14 :Победитель:

Проблема снята, но непонятно - почему она возникала.




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users