Суть в том что вроде бы заголовок сформировал если верить сниферу, но при попытке отправить файл в ответ получаю Bad Request.
_header = GetUploadHeader(urlHost, reqStr), _photos[0]);
_httpId = request(_header, _byteTosend);
_loop.exec();
QHttpRequestHeader GetUploadHeader(QString urlHost, const QString &request, const QString filePath)
{
_byteTosend.clear();
QFile userfile(filePath);
if (!userfile.open(QFile::ReadOnly))
{
QMessageBox::information(0, "File Upload error",
QString("Unable to open the file %1: %2.").arg(filePath).arg(userfile.errorString()));
}
setHost(urlHost, QHttp::ConnectionModeHttp);
QHttpRequestHeader header("POST", request);
header.setValue("Host", urlHost);
header.setValue("Content-type", "multipart/form-data; boundary=---------------------------21974107111333");
header.setValue("Cache-Control", "no-cache");
header.setValue("Connection","Keep-Alive");
_byteTosend.append("-----------------------------21974107111333\r\n");
_byteTosend.append("content-disposition: form-data; name=\"st.filename\"; filename=\""+
filePath+"\""+
"\r\nContent-Type: image/jpeg\r\n\r\n");
_byteTosend.append(userfile.readAll());
_byteTosend.append("\r\n-----------------------------21974107111333--\r\n");
userfile.close();
header.setContentLength(_byteTosend.length());
return header;
}
<input value="Загрузить фотографию" onclick="..." type="submit" name="button_upload">
<input value="" id="field_filename" type="file" name="st.filename">
<form action="http://u10.odnoklassniki.ru/uploadImage?photoId=
jQa5VZyH5Xexs9SflOKHqNBJSBy75R7Dttt0xIGyw2Gw7wP0wTzpWTrnDJL5h%2FN8Dfj4Ylo8PdqO%0AHZ3aNMfoyFSAJ5bFOE5bOZ21sqnk3c0=
&returnUrl=http://wg24.odnoklassniki.ru/dk
?st.cmd=userEditPhoto
&st.photoIds=176090490981
&st.action=EditComment
&st.referer=userPersonalPhotos
&returnErrorUrl=http://wg24.odnoklassniki.ru/dk
?st.cmd=userAddPhoto
&st.referer=userPersonalPhotos" method="post" enctype="multipart/form-data">
А ты получешь передаешь кукисы?
Если нет, то это тоже нужно делать...
Дело не в кукисах, там в ссылке передается jsessionId.
У меня почему-то одноклассники кукисы всегда сбрасывает и мне приходится вручную вводить логин и пароль при каждом заходе. Кроме того, я заметил, что еще какой-то их сервер ставит вторые кукисы.
Вообще еще javascript может ставить кукисы и если какой-то бот лазит по сайтам, то он эти кукисы не получит никогда, т.к. не умеет обрабатывать скрипты, а стало быть и не зайдет на сайт.
P.S.: народ, че за западло, внутри блока [ code][/ code] нельзья написать &аmp; (букву "a" поставил русскую спецом) ?
SABROG, ты это в обратную связь напиши, там Багира заметит, а тут нет.
Ясно
Может все таки есть у кого мысли по поводу проблемы?
Странное дело наблюдается - если нет этой строки
setHost(urlHost, QHttp::ConnectionModeHttp);
А может у кого-то есть опыт заливания картинок на сервер с помощью Qhttp? Показали бы, было бы здорово
Verus,
опыта нет, но думаю засовывать картинку в QByteArray и отправлять на сервер там загружать картинку из того же QByteArray.
в чем конкретно проблема не понятно.
Может я конечно криворукий, но просто я не могу понять что я делаю не так Попробуй загрузить картинку каким-нибудь способом(только с Qt) на одноклассники, если получится, поделись
Сомневаюсь я, что это скрипты одноклассников возвращают такой заголовок.
Скорее всего самому веб-серверу не нравится то, что ты передаёшь...
Читай про ХТТП заголовки спецуху...
ЗЫ. Возможно это какая-нибудь хитрожопая защита одноклассников от роботов...И бэд реквест выдаёт именно бизнес логика этой соц. сети...
Verus,
польщен предложением но есть чем заняться и без этого... это как я понимаю не пятиминутное дело если честно не предполагал что сервер вообще не твой
тут правда Qt не причем протокол все решает ....
можно просмотреть что и как посылается с помощью программ снифферов я пользуюсь ethereal хорошая вещь... посмотришь как картинку посылает браузер состряпаешь такой же запрос серверу должно сработать....
Я думаю, что для начала стоит попробовать залить картинку на свой сервер, на котором поставить полный доступ на заливку, и когда уже это получится пробовать это сделать на чужой.
Вот недавно заливал картинку на антикапчу. Все успешно заливается таким способом:
QHttpRequestHeader Network::GetFileHeader(const QString& fileName)
{
QFile file(fileName);
file.open(QFile::ReadOnly);
QByteArray boundary = "-------------fjfhee78y34uhui";
QHttpRequestHeader header("POST", "/in.php");
_bytesToSend = "--"+boundary+"\r\n"+
"Content-Disposition: form-data; name=\"method\"\r\n\r\npost\r\n"+
"--"+boundary+"\r\nContent-Disposition: form-data; name=\"key\"\r\n\r\n"+_ackey.toUtf8()+"\r\n"+
"--"+boundary+"\r\nContent-Disposition: form-data; name=\"file\"; filename=\""+fileName.toUtf8()+"\"\r\n"+
"Content-Type: image/pjpeg\r\n\r\n"+file.readAll()+"\r\n--"+boundary+"--";
header.setContentLength(_bytesToSend.size());
header.setValue("Host", "ac-service.info");
header.setValue("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8");
header.setContentType("multipart/form-data; boundary="+boundary);
setHost("ac-service.info", QHttp::ConnectionModeHttp);
return header;
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)