Wordpress Module : Visual Form Builder
I need to send post values to one of my
website with visual form builder.
Basically I have this website where people fill up and when
the user submits the form , my website will also send that
data to one of my website with visual form builder .
I've been banging my head for 2 days now .
still no lead to make it work.
*I am using php CURL. I've check cookies , csrf hidden field. etc.... still no luck ...
P.S .. No I have no intention to spam websites..
Here is my code
<?php
set_time_limit(9999999999999999);
require_once './simple_html_dom.php';
$GLOBALS['BASE_URL'] = "http://data.mysite.com";
$GLOBALS['cookieJar'] = "cookieTemp.txt";
function runCommand()
{
$csrf_token = getCSRFVal();
$payload = array(
"form_id" => "1",
"vfb-6[0]" => "Other",
"vfb-9" => "yes",
"vfb-10" => "yes",
"vfb-11" => "yes",
"vfb-12" => "options",
"vfb-14" => "test",
"vfb-15" => "test",
"vfb-16" => "447796272707",
"_wp_http_referer" => "/",
"_vfb-csrf-token" => $csrf_token,
);
$contentLength = strlen(http_build_query($payload));
$request_header = array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding: gzip,deflate,sdch',
'Accept-Language: en-US,en;q=0.8,fil;q=0.6,th;q=0.4,it;q=0.2,es;q=0.2',
'Cache-Control: max-age=0',
'Connection: keep-alive',
'Host:data.mysite.com',
'Origin:http://data.mysite.com',
'Referer:http://data.mysite.com/',
'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36',
'Content-Length:'.$contentLength,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$GLOBALS['BASE_URL']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER , $request_header);
curl_setopt($ch, CURLOPT_COOKIEJAR, $GLOBALS['cookieJar']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $GLOBALS['cookieJar']);
$cur_res = curl_exec($ch);
echo $cur_res;
print_r(curl_getinfo($ch));
curl_close($ch);
}
function getCSRFVal()
{
$request_header = array(
'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language:en-US,en;q=0.8,fil;q=0.6,th;q=0.4,it;q=0.2,es;q=0.2',
'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$GLOBALS['BASE_URL']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER , $request_header);
curl_setopt($ch, CURLOPT_COOKIEJAR, $GLOBALS['cookieJar']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $GLOBALS['cookieJar']);
$page = curl_exec($ch);
$html_object = str_get_html($page);
curl_close($ch);
$tempCsrfToken = "";
if (#$html_object->find("input[name='_vfb-csrf-token']",0)->value) {
$tempCsrfToken = $html_object->find("input[name='_vfb-csrf-token']",0)->value;
}else{
echo "Cant get new csrf token";
die();
}
return $tempCsrfToken;
}
runCommand();
?>
Related
I am getting an error for the following PHP code:
$curl = curl_init("https://api.openai.com/v1/engines/davinci/completions");
$data = array(
'prompt' => 'how many sundays in 2023',
'max_tokens' => 256,
'temperature' => 0.7,
'model' => 'text-davinci-003'
);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer sk-MY-API-KEY']);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
print $result->choices[0]->text;
I correctly provided the API Key, but getting this error:
Error message: You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY)
All Engines endpoints are deprecated.
This is the correct Completions endpoint:
https://api.openai.com/v1/completions
Working example
If you run php test.php in CMD, the OpenAI API will return the following completion:
string(23) "
This is indeed a test"
test.php
<?php
$ch = curl_init();
$url = 'https://api.openai.com/v1/completions';
$api_key = 'sk-xxxxxxxxxxxxxxxxxxxx';
$post_fields = '{
"model": "text-davinci-003",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0
}';
$header = [
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error: ' . curl_error($ch);
}
curl_close($ch);
$response = json_decode($result);
var_dump($response->choices[0]->text);
?>
Is there any option to send message to telegram while there is no access to DNS server (no option to resolve api.telegram.org url) ?
Tried with 149.154.167.220 instead of api.telegram.org - no luck
Yes, it is possible. If IP didn't blocked then you can send request to IP instead of domain.
For example in PHP with curl:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL," IP here ");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$headers = [
'Content-Type: application/html; charset=utf-8',
'Method: GET',
'Host: domain.com',
'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec ($ch);
curl_close ($ch);
print $server_output ;
I have totally no experience in this area. What I am trying to do is to send a post request to access an API which would return a JSON file.
This is the curl process in PHP:
$url = 'https://app.responseiq.com/apis/reports';
$fields = array('token' => $api_key,
'offset' =>$offset,
'limit' =>$limit,
'widget_id'=>$widget_id
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$result = curl_exec($ch);
return $result;
This is what I have so far
httr::POST (
url = "https://app.responseiq.com/apis/reports",
query = list (
token = "ABCDEF",
offset =10,
limit =100,
widget_id = "TEST"
),
httr::content_type("application/x-www-form-urlencoded"),
httr::accept("application/json, text/javascript, */*; d=0.2"),
httr::verbose()
)
I am not getting my expected output, which should be data in JSON format.
Any assistance will be greatly appreciated. If I got my concept totally wrong, it would be great if someone can direct me in the right direction to learn more about using the httr package.Thank you.
I'm working on making an Image Share with the LinkedIn v2 api. There are three steps, according to the LinkedIn docs.
Register your image to be uploaded.
Upload your image to LinkedIn.
Create the image share.
After I complete step 2, I check the status of the upload with /v2/assets/{asset-id} and get a "CLIENT_ERROR". I have no idea what this means and haven't found much about it in the LinkedIn docs or online. It may have something to do with uploading a binary image file as LinkedIn asks, but as far as I know I am uploading one.
Edit: The php-curl I'm using to upload the image is below. The $uploadUrl is obtained from the image register (step 1.)
$data = [
'file' => curl_file_create($file, $mimeType)//;
];
ob_start();
$out = fopen('php://output', 'w');
$ch = curl_init($uploadUrl);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $out);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.35.0');
$authorizationHeader = trim("Authorization: Bearer $accessToken");
curl_setopt($ch, CURLOPT_HTTPHEADER, array($authorizationHeader,"Content-Type: {$mimeType}","X-Restli-Protocol-Version: 2.0.0"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
curl_setopt($ch, CURLOPT_UPLOAD, '1L');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
fclose($out);
$debug = ob_get_clean();
print_r($debug);
$resp_obj = json_decode($response);
print_r($response);
curl_close($ch);
The assets API is returning:
> GET /v2/assets/{redacted} HTTP/1.1
User-Agent: curl/7.35.0
Host: api.linkedin.com
Accept: */*
Authorization: Bearer {redacted}
< HTTP/1.1 200 OK
< X-LI-ResponseOrigin: RGW
< Content-Type: application/json
< X-RestLi-Protocol-Version: 1.0.0
< Content-Length: 319
< Date: Wed, 20 Mar 2019 14:09:18 GMT
< X-Li-Fabric: prod-ltx1
< Connection: keep-alive
< X-Li-Pop: prod-edc2-nkernB
< X-LI-Proto: http/1.1
< X-LI-UUID: {redacted}
< Set-Cookie: {redacted}
< X-LI-Route-Key: {redacted}
Response object is:
(
[serviceRelationships] => Array
(
[0] => stdClass Object
(
[identifier] => urn:li:userGeneratedContent
[relationshipType] => OWNER
)
)
[recipes] => Array
(
[0] => stdClass Object
(
[recipe] => urn:li:digitalmediaRecipe:feedshare-image
[status] => CLIENT_ERROR
)
)
[mediaTypeFamily] => STILLIMAGE
[created] => 1553090957146
[lastModified] => 1553090958505
[id] => {redacted}
[status] => ALLOWED
)
Update: it works fine when I upload the image using command line curl:
curl -i --upload-file {file} --header "Authorization: Bearer {auth}" {url}
Update: Solution:
use file_get_contents: curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents({path-to-your-image));**
$ch = curl_init($uploadUrl);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.35.0');
$authorizationHeader = trim("Authorization: Bearer $accessToken");
curl_setopt($ch, CURLOPT_HTTPHEADER, array($authorizationHeader,"Content-Type: {$mimeType}","X-Restli-Protocol-Version: 2.0.0"));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents({path-to-your-image));
$response = curl_exec($ch);
This: curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents({path-to-your-image));
$ch = curl_init($uploadUrl);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.35.0');
$authorizationHeader = trim("Authorization: Bearer $accessToken");
curl_setopt($ch, CURLOPT_HTTPHEADER, array($authorizationHeader,"Content-Type: {$mimeType}","X-Restli-Protocol-Version: 2.0.0"));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents({path-to-your-image));
$response = curl_exec($ch);
add headers to your code as Content-Type:application/octet-stream
Authorization': Bearer ${ access_token },
'X-Restli-Protocol-Version': '2.0.0',
'Content-Type': 'image/jpg'
body is simply the image file contents or a BLOB
method: POST or PUT... i guess one of it works with some and the second for others
I have done all pages listed in core PHP application using wordpress REST API with CURL but I can't delete that pages with CURL.I got message "{code: "rest_cannot_delete", message: "Sorry, you are not allowed to delete this post.}" every time.
Here is my code.
$url = 'http://localhost/wordpress/wp-json/wp/v2/pages/37';
$postdata = 37; //pageID
function callrestapi_curlDelete($url, $postdata) {
$postdata_json = json_encode($postdata);
// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
));
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata_json);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);
echo json_decode($resp, TRUE);
}
Or if I tried via this code than I am getting the same error.
$.ajax({
url: 'http://localhost/wordpress/wp-json/wp/v2/pages/15 ',
method: 'DELETE',
crossDomain: true,
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode('admin:admin#123'));
},
success: function( data, txtStatus, xhr ) {
console.log( data );
console.log( xhr.status );
}
});
There is no need to post any data to delete a page/post. The URL is enough as you have already included the ID you want to delete. See example below:
$postid = 108;
$rest_api_url = "http://www.example.com/wp-json/wp/v2/post/".$postid;
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_URL, $rest_api_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer '.$token,
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
Notice the variable $token for Authorization which i'm assuming you already know how to generate through basic auth.
This will put the post into trash, if you want to delete permanently then add the following to the end of your URL.
?force=true
add this line to your cURL code
curl_setopt($ch, CURLOPT_USERPWD, "username" . ":" . "password");
don't forget to install and activated basic auth master plugin