Что не так сделал?? Код взял тут на форуме. В мемо добавляется пустая строка в результате. Использую Delphi 10
Я так делал, мурыжил долго. Если делаю запрос к parsers.info в консоле возвращает знаки вопроса в 2 строчке. К другим сайтам вообще не че не возвращает и ошибку не где не выдает.
снифер в руки и вперед за родину. CopyMemory(@sBuff,pchar(sBuff1),length(sBuff1)); send(sHwnd, sBuff, Length(sBuff), 0); recv(sHwnd, rBuff, Length(rBuff), 0); это код полный пздц. Отправляй данный сразу из строки, без промежуточного буфера. А вот когда считываешь, то указывай не Length(rBuff) а размер буфера в байтах. или юзай sizeof
send(sHwnd, sBuff1[1], Length(sBuff), 0); recv(sHwnd, rBuff, sizeof(rBuff), 0); Memo1.Lines.Add(rBuff); PS Только начал изучать винсок. Вот что вернулось в ответ 訄 В Delphi 7 все работает!!! А в 2010 нихера (((
странно а должно было быть нарушение доступа получится примерно так movsx eax, byte ptr[buffer + 1] push eax //... передается не адрес а символ к тому же расширенный в итоге там нечто такого 0x000000df а запись по такому адресу отловится скорее всего как запись в память отведенную для перехвата нулевых уакзателей а если символ был 0xff получится такой адрес 0xffffffff напишите так send(sHwnd, sBuff1, strlen(sBuff), 0); sBuff1[1] это разыменование а нужен адрес и индексация с нуля не забываем
Пытаюсь получить весь HTML код страницы, получаю но из цикла почему то не выходит. PS/ Задолбал заторможеный idhttp =)
Во первых: idHTTP, это компонент из библиотеки Indy. Во вторых: ты тут Winsock используешь, а не Indy. В третьих: Code: for i:=1 to d do html:=html+utf8toansi(buf[i]); memo1.Lines.Add(html); Это вообще неправильный вывод данных в Memo. Так что еще раз пересмотри свою мысль и пойми, кто "заторможеный".
Я не много не правельно выразил мысль про idhttp, это было сказанно к тому что он заторможенный по сравнению с winsock, поэтому я решил научится работать с winsock. Code: for i:=1 to d do html:=html+utf8toansi(buf[i]); memo1.Lines.Add(html); Почему не правельно? В мемо я получаю то что надо. Но немогу понять почему цикл так и продолжает работать.
idHTTP нормально работает, если им правильно пользоваться. Все очень просто. Этот код Code: repeat FillChar(buf,SizeOf(buf),0); d:=recv(Socket1,buf,SizeOf(buf),0); for i:=1 to d do html:=html+utf8toansi(buf[i]); memo1.Lines.Add(html); until d<=0; есть неправильным в том смысле, что ты постоянно добавляешь данные к переменной html, и выводишь ее в Memo. Получается, что некоторая часть страница в Memo будет отображаться несколько раз. В общем, надо перед цыклом for написать Code: html := ''; Цикл продолжает выполняться потому, что нужно в отправляемых заголовках написать не Code: Connection:Keep-Alive А Code: Connection: close