我正在构建一个php程序,从网站获取3个变量并计算它们然后发布结果,我可以读取变量,计算它们,但发布部分对我来说很难,因为它使用Ajax表单(我认为)可以使用XMLhttprequest发布php吗?
这是提交按钮:
<a href="#" class="formSubmit" tabindex="3">
这是消息框:
<textarea name="message" id="messageContent" rows="18" wrap="virtual" tabindex="2"></textarea>
我试图像常规表单一样处理它,但它没有用,我追踪了ajax函数发布:
function formSubmitFunction(e,action, target){
e.stopPropagation();
e.preventDefault();
if ($("#messageContent").attr("value") == undefined || $("#messageContent").attr("value").length < 2){
alert("A mensagem precisa ter no mÃnimo 2 caracteres.");
$("#messageContent").focus();
return false;
}else {
$("#formSubmit").html('<img src="http://website.com/'+desTheme+'/images/send_post.gif');
if(action == "post"){
$("#formAjax").append('<div id="carregando"></div>');
PostFunctions.insertPost(topicId,$("#messageContent").val(), callbackInsertPost);
} else {
var postId = target.replace("#","");
$("#formAjax").append('<div id="carregando"></div>');
PostFunctions.editPost(postId,$("#messageContent").val(), callbackEditPost);
}
return false;
}
}
帮助
@edit:
找到了另一个insertPost函数
function callbackInsertPost(response){
var result = eval("("+response+")");
if($("#popup").length){
$("#popup").remove();
}
if(!result.error){
var returnMessage = "";
if(result.isForumModerated){
returnMessage = '<div id="popup" class="autoClear simple">'
+'Sua mensagem está aguardando a aprovação da moderação.'
+'</div>';
$("#carregando").remove();
$(actualPostId).prepend(returnMessage);
window.setTimeout(function(){
$("#popup").fadeOut("slow", function(){
$("#popup").remove();
});
},5000);
$("#formAjax").remove();
} else {
//console.log(result);
window.setTimeout(function(){
document.location = "_t_lastpost_"+topicId+"_"+forumId+"?postId="+result.postId;
},1500);
/*returnMessage = '<div id="popup" class="autoClear simple">'
+'Mensagem enviada com sucesso! Clique neste <a href="_t_lastpost_'+topicId+'_'+forumId+'">link</a> para ver sua mensagem'
+'</div>';*/
}
} else {
if(result.nickname_reproved){
document.location = "changenickname.jbb";
} else {
$("#carregando").remove();
for(i = 0; i < result.messages.length; i++){
$("#formAjax").prepend('<div id="popup" class="autoClear error-post">'
+result.messages[i]+'<br/>'
+'</div>');
}
$.scrollTo("#popup",500);
$("#formSubmit").html('<a href="#" class="formSubmit" tabindex="3"><img src="'+baseImages+'/themes/'+desTheme+'/images/pm_send.gif"/></a>');
$(".formSubmit").bind("click",function(e){
formSubmitFunction(e,"post")
});
}
}
}
@ EDIT2:
PostFunctions.insertPost = function(p0, p1, callback) {
DWREngine._execute(PostFunctions._path, 'PostFunctions', 'insertPost', p0, p1, callback);
}
答案 0 :(得分:0)
忘掉你正在看的所有JavaScript内容。在模拟浏览器时,您只需重新创建发送到服务器的请求。
如果javascript设置了一些Cookie,请务必检查标题。
修改
Cookie文件由curl创建,格式与fiddler不同。删除它,让curl创建它。
c0-id
是隐藏的表单字段吗?查看来源。如果在另一个浏览器中查看它时它会发生变化,您需要抓取表单,然后根据该值编写您编写的帖子。
发布到显示表单的页面。使用CURL_OPT_COOKIEJAR
。
CURL_OPT_COOKIEJAR
如果您发布到两个不同的网页,它会很有用,因为它会记住上次请求设置的Cookie,就像浏览器一样。
确保您的用户代理是真正的浏览器。
观察浏览器和脚本通过fiddler点击服务器。您希望脚本的行为与浏览器完全相同。因此,请不断调整脚本以使其更接近。最终它会起作用。
首先,抓取网站非常令人沮丧和耗时。坚持下去吧。