How a program know its output will be redirect? - linux

When I use cURL, I Found it seems that cURL knew whether its own output will be redirect, or be input for another program.
Following are two different command:
curl http://www.google.com/
The output will be:
<HTML><HEAD>......blah, blah......</HEAD></HTML>
But if I use redirect or pipe, cURL will print its download status.
curl http://www.google.com/ | xargs echo
the output will be leading with:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 376 100 376 0 0 2729 0 --:--:-- --:--:-- --:--:-- 5295
<HTML><HEAD>......blah, blah......</HEAD></HTML>
My question is: how cURL know whether its print will be redirect?

isatty(3) will tell you if a FD is connected to a TTY.

Related

Transfrer file from raspberry pi to file server on same network with python

I have a raspberry pi taking pictures, that is connected to the LAN. I want to automatically upload each picture file to a samba ubuntu file server I have on my network, so I can easily view them.
I have tried to get the command "curl" with no luck. (which I would run with subprocess in python)
This is my command that doesn't work (trying to copy test.png to destination directory):
curl -T "/home/pi/Desktop/test.png" "smb://10.51.112.128/home/thomas/thomasdrive/destination" -u thomas:87651234
I get:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (7) Couldn't connect to server
I've been searching the internet for a solution, but nothing I try seems to work

invalid option when trying to curl a file in linux and give it rights for execution and then move it

I am trying to download the file that will install Mate UI and give it rights to the scipt file then move it somewhere else, here is the content of the script (onpurposely one script is calling the other due to provisioning limitations):
sudo curl --noproxy "*" "http://location/install-gui.sh" --output /tmp/install-gui.sh
#install Mate Ui on linux
sudo chmod 777 /tmp/install-gui.sh
sudo mv /tmp/install-gui.sh /opt/
sudo /opt/install-gui.sh
I get:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 440 100 440 0 0 2430 0 --:--:-- --:--:-- --:--:-- 2430
: invalid option

Issue with cPanel installation

I am setting up cPanel on CentOS but have been facing this problem with connection. Its giving an error of "Connection refused".
I am working on a system with proxy internet.
curl -o latest -L https://securedownloads.cpanel.net/latest && sh latest
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:41 --:--:-- 0
curl: (7) Failed connect to securedownloads.cpanel.net:443; Connection refused
Update:
I have changed my VM adapter setting to "Bridged" from "NAT"
Still facing the error.
curl -o latest -L https://securedownloads.cpanel.net/latest && sh latest
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:03:33 --:--:-- 0
curl: (7) Failed connect to securedownloads.cpanel.net:443; Operation now in progress
Check if you have any firewall on your server which is blocking connections. Do a ping to securedownloads.cpanel.net.
ping securedownloads.cpanel.net
If ping is working and still your are getting this error.You can use wget as well.
wget https://securedownloads.cpanel.net/latest && sh latest
If you do not have wget. Install it.
yum install wget -y

create a shell who download a file on dropfile.to with curl

It's my 1st question here, so be gentle ;-)
I search how write a shell who can download a file from dropfile.to with curl
Context: We exchange videos we took with our GoPro with dropfile.to instead of cut them and send them by mail.
We don't need any registration but this website keep the videos during 24 hours before delete them automatically.
So, I write a shell who read my mail (done) and download automatically a video when it find a dropfile.to link...
For now, I know when I press the button "dowload file" on dropfile.to/$code, I send a POST request with the parameter dl_file_name : "$code"; the website do a redirection and do a GET request; the file I want is in the header answer as a file attachment...
so the curl request should be something like:
curl -L -O -J -d download-file:$code https://dropfile.to/$code
with options:
-L for the redirection
-O for download the result
-J for download the attachment file
-d for the POST method
Sadly, it not work... T_T
and when i use directly the get URL i found in my browser like:
curl -O -J $urlGet
i have some erors like:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 178 100 178 0 0 337 0 --:--:-- --:--:-- --:--:-- 337
100 154 100 154 0 0 139 0 0:00:01 0:00:01 --:--:-- 3080
Warning: Remote filename has no length!
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
curl: (23) Failed writing body (0 != 3445)
I hope you can help me
In application/x-www-form-urlencoded format, names and values are separated with equal symbol (=) :
code="p42zvEV"
curl -L -J -O "https://dropfile.to/$code" -d "dl_file_name=$code"

curl syntax error: append couchdb document failed with "conflict"?

I've installed couchdb and mingw64 on my windows 10, I can use futon to operate my couch db, no problem. Then I tried command line using curl.
I used curl to create database named "my_database", I can query it using "GET":
$ curl -X GET http://localhost:5984/my_database/002
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 81 100 81 0 0 397 0 --:--:-- --:--:-- --:--:-- 397{"_id":"002","_rev":"1-5e653801ca3cefde8abb6492ae3bcbcd","name":"mesi","age":23}
But I cannot do any data update, seems my curl syntax had problem:
$ curl -X PUT http://127.0.0.1:5984/my_database/002/msg.jpg?res=1-5e653801ca3cefde8abb6492ae3bcbcd --data-binary #/e/msg.jpg -H "ContentType:image/jpg"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
14 910k 100 58 14 128k 58 128k 0:00:07 --:--:-- 0:00:07 125M{"error":"conflict","reason":"Document update conflict."}
I know the jpg file is there:
$ ls /e/msg.jpg
/e/msg.jpg
Why I cannot update the jpg document as attachement? I guess I might have some syntax error using curl or couchdb, but how to fix it?
Using futon_db: created document, but what's the URL resource name of it?
Whenever you update a document/Attachment in CouchDB, you need to specify the revision (otherwise it cause conflicts). I guess that you only forgot to write rev properly (you wrote res).
Syntax taken from this question :
curl -vX PUT http://localhost:5984/YOUR_DB/YOUR_DOCUMENT/YOUR_ATTACHMENT.jpg?rev=REVISION_OF_THE_DOCUMENT_BEFORE_UPLOADING_AN_ATTACHMENT --data-binary #FILE_ON_THE_DISK.JPG -H "Content-Type: image/jpg"

Resources