Skapa en rullgardinslista i html. Trädliknande listor med olika varianter

Skapa en rullgardinslista i html. Trädliknande listor med olika varianter

c URL är ett mycket användbart kommandoradsverktyg för att överföra data från eller till en server. Curl stöder olika protokoll som FILE, HTTP, HTTPS, IMAP, IMAPS, LDAP, DICT, LDAPS, TELNET, FTPS, GOPHER, RTMP, RTSP, SCP, SFTP, POP3, POP3S, SMB, SMBS, SMTP, SMTPS och TFTP .

cURL kan användas på många olika och intressanta sätt. Med detta verktyg kan du ladda ner, ladda upp och hantera filer, kontrollera din adress E-post, eller till och med uppdatera din status på några webbplatser för sociala medier eller kolla vädret utanför. I den här artikeln kommer vi att titta på fem av de mest användbara och grundläggande användningarna av cURL-verktyget på alla .

1. Kontrollera URL

En av de vanligaste och enklaste användningarna av cURL är att skriva ut själva kommandot följt av webbadressen du vill testa

Curl https://domain.ru

Detta kommando visar innehållet i URL:en på din terminal

2. Spara URL-utdata till en fil

Curl -o webbplats https://domain.ru % Totalt % Mottaget % Xferd Medelhastighet Tid Tid Tid Aktuell Ladda Uppladdning Totalt förbrukad vänsterhastighet 100 41793 0 41793 0 0 275k 0 --:--:-- - --:-- :-- --:--:-- 2,9M

I det här exemplet kommer utdata att sparas i en fil med namnet 'webbplats' i den aktuella arbetskatalogen.

3. Ladda ner filer med Curl

Du kan ladda ner filer med Curl genom att lägga till alternativet -o till kommandot. Den används för att spara filer till lokal server med samma namn som på fjärrservern

Curl -O https://domain.ru/file.zip

I det här exemplet kommer 'file.zip'-arkivet att laddas ner till den aktuella arbetskatalogen.

Du kan också ladda upp en fil med ett annat namn genom att lägga till alternativet -o i cURL.

Curl -o archive.zip https://domain.ru/file.zip

Så "file.zip"-arkivet kommer att laddas ner och sparas som "Archive.zip".

cURL kan också användas för att ladda ner flera filer samtidigt, som visas i exemplet nedan

Curl -O https://domain.ru/file.zip -O https://domain.com/file2.zip

Curl kan också användas för att ladda ner filer säkert över SSH med följande kommando

Curl -u användare sftp://server.domain.ru/path/to/file

Observera att du måste använda fullständig sökväg till filen du vill ladda ner

4. Få information från webbplatsens HTTP-huvud

Du kan enkelt få HTTP-huvudinformation från vilken webbplats som helst genom att lägga till alternativet -I ('i') till cURL.

Curl -I http://domain.ru HTTP/1.1 200 OK Datum: sön, 16 okt 2016 23:37:15 GMT Server: Apache/2.4.23 (Unix) X-Powered-By: PHP/5.6.24 Anslutning : stäng Content-Type: text/html; charset=UTF-8

5. FTP-serveråtkomst

För att komma åt FTP-servern med Curl måste du använda följande kommando

Curl ftp://ftp.domain.ru --användare användarnamn:lösenord

Curl kommer att ansluta till FTP-servern och lista alla filer och kataloger i användarens hemkatalog

Du kan ladda ner filen med FTP

Curl ftp://ftp.domain.ru/file.zip --användare användarnamn:lösenord

och ladda upp filen till FTP-servern

Curl -T file.zip ftp://ftp.domain.ru/ --användare användarnamn:lösenord

Du kan kontrollera Curl-sidan manuellt för att se alla tillgängliga cURL-alternativ och dess funktionalitet

man-curl

PS. Om du gillade det här inlägget, vänligen dela det med dina vänner i sociala nätverk använd knapparna nedan eller lämna bara en kommentar. Tack.

Den här artikeln förutsätter att du är bekant med grunderna i nätverk och HTML-språket.

Förmågan att skriva manus är avgörande för att bygga en vara datorsystem. Unix-systems utbyggbarhet genom skalskript och olika program som kör automatiserade kommandon är en av anledningarna till att de är så framgångsrika.

Det ökande antalet applikationer som flyttar till webben har lett till att ämnet HTTP-skript blir mer och mer efterfrågat. Viktiga uppgifter inom detta område är automatisk utvinning av information från Internet, sändning eller nedladdning av data till webbservrar, etc.

Curl är ett kommandoradsverktyg som låter dig göra URL-manipulation och skicka olika typer. Den här artikeln fokuserar på att göra enkla HTTP-förfrågningar. Det antas att du redan vet var du ska ringa

# curl --hjälp

# curl --manual

för information om curl.

Curl är inte ett verktyg som kommer att göra allt för dig. Den skapar förfrågningar, tar emot data och skickar data. Du kan behöva lite "lim" för att hålla ihop allt, kanske något skriptspråk (som bash) eller några manuella samtal.

1. HTTP-protokoll

HTTP är det protokoll som används vid mottagning av data från webbservrar. Det är ett väldigt enkelt protokoll som är byggt ovanpå TCP/IP. Protokollet tillåter också att information skickas till servern från klienten med flera metoder, vilket kommer att visas härnäst.

HTTP är strängar av ASCII-text som skickas från en klient till en server för att begära någon åtgärd. När en förfrågan tas emot svarar servern klienten med flera tjänsttextrader och sedan med det faktiska innehållet.

Med alternativet curl -v kan du se vilka kommandon curl skickar till servern, såväl som annan informationstext. Switchen -v är kanske det enda sättet att felsöka eller ens förstå interaktionen mellan curl och webbservern.

2. URL

URL-formatet (Uniform Resource Locator - universell resursadress) anger adressen till en specifik resurs på Internet. Du vet säkert detta, exempel på webbadresser är http://curl.haxx.se eller https://dinbank.com.

3. Skaffa (GET) sida

Den enklaste och vanligaste HTTP-förfrågan är att få innehållet i en URL. URL:en kan referera till en webbsida, en bild eller en fil. Klienten skickar en GET-förfrågan till servern och tar emot det begärda dokumentet. Om du kör kommandot

# curl http://curl.haxx.se

du kommer att få en webbsida som visas i ditt terminalfönster. Hela HTML-dokumentet som finns på denna URL.

Alla HTTP-svar innehåller en uppsättning rubriker som vanligtvis är dolda. För att se dem tillsammans med själva dokumentet, använd alternativet curl -i. Du kan också begära endast rubriker med -I-omkopplaren (som kommer att tvinga curl att göra en HEAD-begäran).

4. Former

Formulär är det primära sättet att presentera en webbplats som en HTML-sida med fält där användaren anger data och sedan klickar på en OK eller Skicka-knapp, varefter data skickas till servern. Servern använder sedan mottagna data och bestämmer hur man ska gå tillväga: slå upp informationen i databasen, visa den angivna adressen på kartan, lägg till ett felmeddelande eller använd informationen för att autentisera användaren. Naturligtvis finns det något program på serversidan som accepterar din data.

4.1 FÅ

GET-formuläret använder GET-metoden, så här:

Om du öppnar den här koden i din webbläsare kommer du att se ett formulär med en textruta och en knapp som säger "OK". Om du anger "1905" och klickar på OK kommer webbläsaren att generera en ny URL att följa. URL:en kommer att vara en sträng som består av sökvägen till den föregående URL:en och en sträng som "junk.cgi?birthyear=1905&press=OK".

Om formuläret till exempel fanns på "www.hotmail.com/when/birth.html", kommer du till webbadressen "www.hotmail.com/when/junk.cgi?birthyear= genom att klicka på OK-knappen. 1905&tryck=OK" .

Majoritet sökmotorer arbeta på detta sätt.

För att få curl att generera en GET-förfrågan anger du bara vad du kan förvänta dig av formuläret:

# curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"

4.2 POST

GET-metoden gör att all inmatad information visas i adressfältet i din webbläsare. Detta kan vara bra när du behöver bokmärka en sida, men det är en uppenbar nackdel när du anger hemlig information i formulärfält, eller när mängden information som skrivs in i fälten är för stor (vilket resulterar i en oläsbar URL).

HTTP-protokollet tillhandahåller POST-metoden. Med den skickar klienten data separat från URL:en och därför kommer du inte att se den i adressfältet.

Formuläret som genererar POST-begäran liknar det föregående:

Curl kan bilda en POST-förfrågan med samma data enligt följande:

# curl -d "födelseår=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

Denna POST-förfrågan använder "Content-Type application/x-www-form-urlencoded", vilket är det mest använda sättet.

Datan du skickar till servern måste vara korrekt kodad, curl kommer inte att göra det åt dig. Om du till exempel vill att data ska innehålla ett mellanslag måste du ersätta det utrymmet med %20, och så vidare. Bristande uppmärksamhet på denna fråga är ett vanligt misstag, på grund av vilket data inte överförs som det borde.

Redan 1995 bestämdes det ytterligare sättöverföra data över HTTP. Det är dokumenterat i RFC 1867, varför det ibland kallas RFC1867-posting.

Denna metod är främst utformad för att bättre stödja filuppladdningar. Formuläret som låter användaren ladda upp en fil ser ut så här i HTML:

Observera att Content-Type är inställd på multipart/form-data.

För att skicka data till ett sådant formulär med curl, skriv in kommandot:

# curl -F [e-postskyddad]-Fpress=OK

4.4 Dolda fält

Ett vanligt sätt att kommunicera tillståndsinformation i HTML-applikationer är att använda dolda fält i formulär. Dolda fält fylls inte i, de är osynliga för användaren och skickas på samma sätt som vanliga fält.

Ett enkelt exempel på ett formulär med ett synligt fält, ett dolt fält och en OK-knapp:

För att skicka en POST-förfrågan med curl behöver du inte tänka på om fältet är dolt eller inte. För curl är de alla lika:

# curl -d "födelseår=1905&press=OK&person=daniel"

4.5 Ta reda på hur en POST-förfrågan ser ut

När du vill fylla i ett formulär och skicka data till servern med curl vill du förmodligen att POST-förfrågan ska se ut exakt som den som gjordes med webbläsaren.

Ett enkelt sätt att se din POST-förfrågan är att spara formulärets HTML-sida på disken, ändra metoden till GET och trycka på knappen "Skicka" (du kan också ändra webbadressen som data ska skickas till).

Du kommer att se att data har lagts till i URL:en, separerade med "?"-tecken, som förväntat när du använder GET-formulär.

5. PUT

Kanske, Det bästa sättet ladda upp data till HTTP-servern är att använda PUT. Återigen, detta kräver ett program (skript) på baksidan som vet vad man ska göra och hur man accepterar en HTTP PUT-ström.

Skicka en fil till servern med curl:

# curl -T uppladdningsfil www.uploadhttp.com/receive.cgi

6. Autentisering

Autentisering - skickar ett användarnamn och lösenord till servern, varefter den kontrollerar om du har rätt att utföra den begärda begäran. Grundläggande autentisering (som curl använder som standard) är klartextbaserad, vilket innebär att användarnamnet och lösenordet inte kommer att krypteras, utan bara "obfusceras" med Base64-algoritmen, vilket gör det möjligt för angripare att ta reda på denna information på vägen mellan dig och HTTP-servern.

Säg till curl att använda användarnamn och lösenord:

# curl -u namn:lösenord www.secrets.com

Webbplatsen kan kräva användning av en annan autentiseringsmetod (se vad servern skriver i rubrikerna), i dessa fall kan du använda nycklarna --ntlm, --digest, --negotiate eller till och med --anyauth. Ibland sker åtkomst till externa HTTP-servrar via en proxy, vilket ofta görs i företag och företag. En HTTP-proxy kan kräva sitt eget användarnamn och lösenord för att komma åt Internet. Relevant locknyckel:

# curl -U proxyanvändare:proxylösenord curl.haxx.se

Om proxyn kräver NTLM-autentisering, ange --proxy-ntlm, om metoden Digest, sedan --proxy-digest.

Om du inte anger ett lösenord i alternativen -u och -U, kommer curl att be dig om det interaktivt.

Observera att när curl körs kan körsträngen (och med den nycklarna och lösenorden) vara synlig för andra användare på ditt system i uppgiftslistan. Det finns sätt att förhindra detta. Mer om det nedan.

7. Referent

En HTTP-begäran kan innehålla ett "referer"-fält som anger webbadressen från vilken användaren kom till denna resurs. Vissa program/skript kontrollerar "referer"-fältet och exekverar inte begäran om användaren kom från en okänd sida. Även om detta är ett dumt sätt att kontrollera, använder många skript det ändå. Med curl kan du lägga vad som helst i "referer"-fältet och på så sätt tvinga den att göra vad du vill.

Detta görs på följande sätt:

# curl -e http://curl.haxx.se daniel.haxx.se

8. Användaragent

Alla HTTP-förfrågningar stöder ett "User-Agent"-fält som anger användarens klientapplikation. Många webbapplikationer använder denna information för att visa sidan på ett eller annat sätt. Webbprogrammerare skapar flera versioner av en sida för användare olika webbläsare att förbättra utseende, med olika javascript-skript, vbscript, etc.

Ibland kanske du upptäcker att curl returnerar en sida som inte är vad du såg i din webbläsare. I det här fallet är det bara lämpligt att använda fältet "User Agent" för att återigen lura servern.

Förklädnad curl som Internet Explorer på en Windows 2000-maskin:

# curl -A "Mozilla/4.0 (kompatibel; MSIE 5.01; Windows NT 5.0)"

Varför inte bli Netscape 4.73 på en Linux-maskin (PIII):

# curl -A "Mozilla/4.73 (X11; U; Linux 2.2.15 i686)"

9. Omdirigeringar

Som svar på din begäran kan servern, istället för själva sidan, returnera en indikation om var webbläsaren ska gå bredvid för att komma till önskad sida. Rubriken som talar om för webbläsaren denna omdirigering är "Plats:".

Som standard går curl inte till adressen som anges i "Plats:", utan visar helt enkelt sidan som vanligt. Men du kan skicka det så här:

# curl -L www.sitethatredirects.com

Om du använder curl to POST-förfrågningar till en webbplats som omedelbart omdirigerar till en annan sida, kan du säkert använda -L och -d/-F. Curl kommer att göra en POST-begäran för den första sidan och sedan en GET-begäran för nästa.

10. Cookies

Cookies tillåter webbläsare att kontrollera tillståndet på klientsidan. Cookie är ett namn med bifogat innehåll. Servern, genom att skicka cookies, berättar för klienten sökvägen och värdnamnet vart nästa gång cookies ska skickas, berättar cookiens livslängd och några andra parametrar.

När en klient ansluter till servern på adressen som anges i den mottagna cookien, skickar klienten den cookien till servern (om livslängden inte har löpt ut).

Många applikationer och servrar använder den här metoden för att kombinera flera förfrågningar till en logisk session. För att även curl ska kunna utföra denna funktion måste vi kunna spara och skicka cookies, precis som webbläsare gör.

Det enklaste sättet att skicka en cookie till servern när du hämtar en sida med curl är att lägga till lämplig nyckel till kommandorad:

# curl -b "name=Daniel" www.cookiesite.com

Cookies skickas som vanliga HTTP-rubriker. Detta gör att curl kan lagra cookies genom att lagra rubriker. Att spara kakor med curl görs med kommandot:

# curl -D headers_and_cookies www.cookiesite.com

(förresten, det är bättre att använda -c-växeln för att spara cookies, mer om det nedan).

curl har en komplett cookie-hanterare som är användbar när du vill ansluta till servern igen och använda de cookies du sparade senast (eller handgjorda). För att använda cookies lagrade i en fil, ring curl så här:

# curl -b lagrade_cookies_i_fil www.cookiesite.com

Curl cookie-motorn är aktiverad när du anger -b-omkopplaren. Om du vill att curl bara ska acceptera cookies, använd -b med en fil som inte finns. Om du till exempel vill att curl ska acceptera cookies från en sida och sedan följer en omdirigering (kanske ger bort den cookie som just accepterades), kan du kalla curl så här:

# curl -b nada -L www.cookiesite.com

Curl kan läsa och skriva cookies i Netscape- och Mozilla-format. Detta bekväm väg utbyta cookies mellan webbläsare och automatiska skript. Omkopplaren -b bestämmer automatiskt om given fil cookies för de angivna webbläsarna och hanterar det därefter, och med alternativet -c/--cookie-jar kan du tvinga curl att skriva en ny cookie när operationen är klar:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

Det finns flera sätt att säkra dina HTTP-överföringar. Det mest kända protokollet som löser detta problem är HTTPS, eller HTTP over SSL. SSL krypterar all data som skickas och tas emot över nätverket, vilket ökar sannolikheten för att din information förblir hemlig.

Curl stöder förfrågningar till HTTPS-servrar tack vare det kostnadsfria OpenSSL-biblioteket. Förfrågningar förekommer på vanligt sätt:

# curl https://that.secure.server.com

11.1 Certifikat

I HTTPS-världen använder du certifikat för autentisering utöver användarnamn och lösenord. Curl stöder certifikat på klientsidan. Alla certifikat är låsta med en lösenordsfras som du måste ange innan curl kan börja arbeta med dem. Nyckelfras kan anges antingen på kommandoraden eller matas in interaktivt. Certifikat i curl används så här:

# curl -E mycert.pem https://that.secure.server.com

Curl autentiserar även servern genom att verifiera serverns certifikat mot ett lokalt lagrat. En felmatchning kommer att resultera i att curl vägrar att ansluta. För att ignorera autentisering, använd -k-omkopplaren.

Mer detaljerad information certifikat finns på http://curl.haxx.se/docs/sslcerts.html.

12. Godtyckliga begäransrubriker

Du kan behöva ändra eller lägga till delar av individuella curl-förfrågningar.

Du kan till exempel ändra POST-förfrågan på PROPFIND och skicka data som "Content-Type: text/xml" (istället för den vanliga Content-Type):

# curl -d " " -H "Content-Type: text/xml" -X PROPFIND url.com

Du kan ta bort vilken rubrik som helst genom att ange den utan innehåll. Du kan till exempel ta bort "Host:"-rubriken och därigenom göra begäran "tom":

# curl -H "Värd:" http://mysite.com

Du kan också lägga till rubriker. Din server kan behöva rubriken "Destination:":

# curl -H "Destination: http://moo.com/nowhere" http://url.com

13. Felsökning

Det händer ofta att en webbplats svarar på curl-förfrågningar annorlunda än webbläsarförfrågningar. I det här fallet måste du assimilera curl till webbläsaren så mycket som möjligt:

  • Använd --trace-ascii-omkopplaren för att spara en detaljerad rapport med förfrågningar så att du kan granska dem i detalj och förstå problemet.
  • Se till att du letar efter cookies och använd dem när det behövs (läs -b switch och spara -c switch)
  • Ange en av de senaste populära webbläsarna i fältet "user-agent".
  • Fyll i "referer"-fältet som webbläsaren gör
  • Om du använder POST-förfrågningar, se till att alla fält skickas i samma ordning som webbläsaren (se ovan, punkt 4.5)

En bra hjälpreda i denna svåra uppgift är Mozilla/Firefox LiveHTTPHeader-plugin, som låter dig se alla rubriker som den här webbläsaren skickar och tar emot (även när du använder HTTPS).

En mer låg nivå är att fånga HTTP-trafik på nätverket med hjälp av program som ethereal eller tcpdump och sedan analysera vilka rubriker som togs emot och skickades av webbläsaren (HTTPS gör detta tillvägagångssätt ineffektivt).

RFC 2616 är obligatorisk läsning för alla som vill förstå HTTP-protokollet.

RFC 2396 förklarar URL-syntaxen.

RFC 2109 definierar hur cookies fungerar.

RFC 1867 definierar filuppladdningsformatet.

http://openssl.planetmirror.com - Hemsida OpenSSL-projektet

http://curl.haxx.se - cURL-projektets hemsida

Ett riktigt praktiskt exempel: du måste starta om routern (modemet) för att ändra IP-adressen. För att göra detta måste du: logga in på routern, gå till underhållssidan och klicka på knappen "Starta om". Om denna åtgärd måste utföras flera gånger, måste proceduren upprepas. Håller med, du vill inte göra den här rutinen manuellt varje gång. cURL låter dig automatisera allt detta. Med bara några få cURL-kommandon kan du uppnå auktorisering och slutföra uppgiften på routern.

  • cURL är praktiskt för att hämta data från webbplatser på kommandoraden.
Ett annat praktiskt exempel: vi vill implementera visning av allmän statistik för flera webbplatser. Om du använder cURL blir detta en helt trivial uppgift: med cURL autentiseras vi på statistikinsamlingstjänsten (om det behövs), sedan (igen, med hjälp av cURL-kommandon) får vi de nödvändiga sidorna, vi analyserar de data vi behöver; proceduren upprepas för alla våra webbplatser, sedan lägger vi ihop och visar det slutliga resultatet.

De där. cURL-användningsfall är ganska verkliga, även om programmerare som använder det för sina program i de flesta fall behöver cURL.

CURL stöder många protokoll och auktoriseringsmetoder, kan överföra filer, fungerar korrekt med cookies, stöder SSL-certifikat, proxyservrar och mycket mer.

cURL i PHP och kommandoraden

Vi kan använda cURL på två huvudsakliga sätt: i PHP-skript och på kommandoraden.

För att aktivera cURL i PHP på servern måste du avkommentera raden i filen php.ini

Extension=php_curl.dll

Och starta sedan om servern.

På Linux måste du installera curl-paketet.

På Debian, Ubuntu eller Linux Mint:

$ sudo apt-get install curl


På Fedora, CentOS eller RHEL:

$ sudo yum installera curl

För att tydligt se skillnaden i användning i PHP och på kommandoraden kommer vi att utföra samma uppgifter två gånger: först i PHP-skript och sedan på kommandoraden. Låt oss försöka att inte bli förvirrade.

Hämta data med cURL

Hämta data med cURL i PHP

PHP exempel:

Allt är väldigt enkelt:
$target_url- adressen till webbplatsen som vi är intresserade av. Efter webbplatsadressen kan du sätta ett kolon och lägga till portadressen (om porten skiljer sig från den vanliga).

curl_init- initierar en ny session och returnerar ett handtag, som i vårt exempel är tilldelat en variabel $ch.

Vi exekverar sedan cURL-begäran med funktionen curl_exec, som skickas en deskriptor som en parameter.

Allt är väldigt logiskt, men när det här skriptet körs kommer innehållet på webbplatsen att visas på vår sida. Men tänk om vi inte vill visa innehållet, utan vill skriva det till en variabel (för vidare bearbetning eller analys).

Låt oss lägga till lite till vårt manus:

0) ( echo "curl error: " . curl_error($ch); ) curl_close($ch); ?>

Vi har en linje curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt- ställer in alternativ. Full lista alternativ finns på denna sida:

Dold för gäster

$response_data = curl_exec($ch);

Nu tilldelas skriptets värde till variabeln $response_data, som kan användas för ytterligare operationer. Du kan till exempel visa dess innehåll.

Stygn

If (curl_errno($ch) > 0) ( echo "curl error: " . curl_error($ch); )

används för felsökning vid fel.

Hämta data med cURL på kommandoraden

Skriv bara på kommandoraden

var istället för mi-al.ru- adressen till din webbplats.

Om du behöver kopiera data till en variabel och inte visa resultatet på skärmen gör du så här:

Temp="curl mi-al.ru"

Vissa data visas dock fortfarande:

Lägg till nyckeln så att de inte visas -s:

Temp="curl -s mi-al.ru"

Du kan se vad som har spelats in:

echo $temp | mindre

Grundläggande och HTTP-autentisering

Autentisering, enkelt uttryckt, är införandet av ett användarnamn och lösenord.

Grundläggande autentisering är autentisering på serversidan. För detta skapas två filer: .htaccess Och .htpasswd

Innehållet i .htaccess-filen är ungefär så här

AuthName "Endast för registrerade användare!" AuthType Basic kräver giltig användare AuthUserFile /home/freeforum.biz/htdocs/.htpassw


Innehållet i .htpasswd-filen är ungefär så här:

Mial:CRdiI.ZrZQRRc

De där. hash för inloggning och lösenord.

När du försöker komma åt en lösenordsskyddad mapp kommer webbläsaren att visa något så här:

HTTP-autentisering är fallet när vi anger ett användarnamn och lösenord i ett formulär på en webbplats. Det är denna autentisering som används vid inmatning av e-post, forum etc.

cURL Basic Authentication (PHP)

Det finns en hemsida

Dold för gäster

Låt oss prova vårt första skript:

0) ( echo "curl error: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Även om skriptet anser att det inte finns något fel, gillar vi inte resultatet alls:

Vi lägger till två rader:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

På den första raden ställer vi in ​​typen av autentisering - grundläggande. Den andra raden innehåller namn och lösenord separerade med ett kolon (i vårt fall är namnet och lösenordet samma - ru-board). Det blev så här:

0) ( echo "curl error: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?> Försöker: 30946 Bra! Grundläggande cURL-autentisering (på kommandoraden) Detsamma kan uppnås på kommandoraden med en rad: curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

Jag glömde inte att ange autentiseringstypen, det är bara att i cURL är den grundläggande autentiseringstypen standard.

På kommandoraden blev allt så snabbt att jag av frustration skrev det här programmet. Hon ansluter till webbplatsen och laddar ner den senaste uppdateringen:

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Update_FED_201(1).(2).(2).7z" | unik | svans -n 1'; curl -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

Bara några fler kommandon kan läggas till:

  • packa upp arkivet till den angivna katalogen;
  • lansering av ConsultantPlus-uppdateringar (detta är uppdateringar för honom);
  • du kan genomföra en kontroll - om den senaste tillgängliga uppdateringen redan har laddats ner eller en ny har dykt upp;
  • lägg till allt i Cron för dagliga uppdateringar.
cURL HTTP-autentisering

cURL HTTP-autentisering i PHP

Vi behöver veta:

  • adress dit data ska skickas för autentisering
  • skicka metod GET eller POST
  • logga in
  • Lösenord
Ibland räcker inte dessa uppgifter. Låt oss ta reda på det.

Adressen dit du vill skicka data kan hämtas från autentiseringsformuläret. Till exempel:

Vi tittar på fastigheten handling. De där. slutsidan är login.php. Vi behöver hela adressen, Till exempel

Dold för gäster

Här hittar vi även sändningsmetoden: method="post"

Jag känner också till inloggningen och lösenordet: admin och qwerasdfzxcv
De där. en sträng skickas till servern från formuläret med POST-metoden. Teoretiskt sett borde vårt tidigare manus, där vi lade till en ny rad, fungera. De där. autentisering måste ske.

0) ( echo "curl error: " . curl_error($ch); ) else ( ) curl_close($ch); ?>

Ny rad i manus

curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

Här curl_setopt- den redan bekanta funktionen för att ställa in alternativ för cURL, CURLOPT_POSTFIELDSär namnet på alternativet vi ställer in. CURLOPT_POSTFIELDS innehåller all data som skickas med POST-metoden. Tja, själva linjen LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv– det här är samma data som vi överför.

Om du noggrant undersöker formuläret kan du se att det även innehåller dolda fält. Och data kan bearbetas eller kompletteras med JavaScript. Du kan studera allt detta, men jag föredrar det enklare sättet.

Jag använder Wireshark. Detta program är designat för att sniffa (avlyssna) trafik. Och det är i det som det är väldigt bekvämt att se exakt vad som överförs till webbplatsen.

Se denna lilla video:


De där. med adressen dit data överförs, gissade jag. Men den överförda strängen visade sig vara mycket mer komplicerad.

Jag angav rätt parameter och modifierade också skriptet något så att det inte bara loggade in utan också fick något från routern:

0) ( echo "Curl error: " . curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 = curl_init($target_url2); curl_setopt($ ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 = curl_exec($ch2); preg_match("|f.ssid.value = "(.*)";|", $response_data2, $results2); $results2 = str_replace("f .ssid.value = "", "", $results2); $results2 = str_replace("";", "", $results2); echo "Wifi-nätverksnamn: $resultat2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Wi-fi-nätverkslösenord: $resultat3"; ) curl_close($ch); ?>

Förresten, om ägaren uppdaterar lösenordet (men inte uppdaterar firmwaren), så kan det nya lösenordet alltid ses på

Dold för gäster

(Detta är en välkänd sårbarhet i routrar D-Link DIR-300, D-Link DIR-320 och D-Link DAP-1353).

cURL HTTP-autentisering på kommandoraden

Vi känner redan till den fullständiga adressen, såväl som strängen som ska överföras. Därför är allt enkelt:

Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php

Jag tror att allt är klart, eftersom vi redan har övervägt dessa termer. Om någon är otydlig – fråga i kommentarerna.

Ett exempel på att använda cURL för att hämta och analysera data skulle vara följande uppsättning kommandon:

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.phnull "/de " && echo "Wi-Fi-nätverksnamn" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Wi-Fi-nätverkslösenord" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

Det skulle vara mer korrekt att skriva rubrikdata så här: "Komplexa" fall av auktorisation. De där. sätta ordet "komplex" inom citattecken. De verkar komplicerade bara vid första anblicken, när det inte är klart: var sändningen sker, vad är fältnamnen, exakt vad som skickas etc.

Men i själva verket kommer de alla till POST- eller GET-metoderna. För att förstå exakt vad som skickas kan du spara sidan med formuläret på din disk och hänga funktionen för att visa data som genereras för att skicka på skicka-knappen. Eller ännu enklare - som jag, Wireshark "ohm.

Om uppgifterna är korrekta och autentisering inte sker, måste du gräva i följande riktningar:

  • ställ in rätt referenssträng
  • ställ in "korrekt" användaragentsträng.
Allt detta kan göras med grundläggande cURL-metoder, men jag ska inte uppehålla mig vid det. Lektionen visade sig redan vara stor, men jag ville också visa ett par knep med cURL.

Tips och tricks cURL

cURL och få cookies förutom CURLOPT_COOKIEJAR

Jag tror att det redan är klart att cURL hanterar cookies korrekt – sparar dem, använder dem när servern begär dem etc. Men ibland behöver cookies sparas. Det finns ett alternativ CURLOPT_COOKIEJAR för detta, men det är inte alltid möjligt att använda det. Det är vad vårt första trick handlar om.

Ibland, på grund av särdragen hos PHP-inställningarna på servern, är sådana alternativ som CURLOPT_COOKIEJAR (låter dig spara mottagna cookies till en fil) och CURLOPT_COOKIEFILE (låter dig använda cookies från en fil) inte tillgängliga för oss. Därför att de säger att med dessa alternativ kommer vi att kunna hämta vilken fil som helst från deras server. Här är lösningen på problemet:

1) Använd inte CURLOPT_FOLLOWLOCATION
2) Använd curl_setopt($ch, CURLOPT_HEADER, 1)
3) Vi samlar in cookies från rubriken så här:

preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results);

4) Ställ in dem med curl_setopt($ch, CURLOPT_COOKIE, $cookies);

Andra tipset. Från angripare kan vi förvandlas till offer. För att inte bli ett offer för en man-i-mitten-attack gör vi detta.

Snälla alla, sluta ställa in CURLOPT_SSL_VERIFYPEER-inställningen till false eller 0. Om din PHP-installation inte har en uppdaterad uppsättning CA-rotcertifikat, ladda ner ett från curl-webbplatsen och spara det på din server:

Dold för gäster

Ange sedan sökvägen i din php.ini-fil, till exempel på Windows:

curl.cainfo=c:phpcacert.pem

Att inaktivera CURLOPT_SSL_VERIFYPEER tillåter en man-in-the-middle (MITM) attack, vilket vi inte vill ha!

Nåväl, ett sista tips för idag. Visste du att ett stort antal asynkrona curl-förfrågningar är möjliga?

För detta kan du använda curl_multi_init. Detaljer och exempelkod i den officiella dokumentationen

Dold för gäster

Dold för gäster


Om cURL på kommandoraden

Dold för gäster


För läsning på ryska har den andra delen av cURL-lektionen också förberetts: "".
cURL är ett kommandoradsverktyg för att hämta eller skicka data med URL-syntax.

Om du arbetar i en helpdesk bör du kunna använda cURL-kommandon för att felsöka webbapplikationer. cURL är ett plattformsoberoende verktyg för Windows, MAC och UNIX.
Följande är några vanliga syntaxexempel.

1. Kontrollera anslutningen till URL:en

Om du använder ett UNIX-system och försöker ansluta till en extern URL, kontrollera först att du kan komma åt resursen med curl . För att göra detta, använd följande kommando:

#curl yoururl.com

2. Spara utgående URL/URI till en fil

# curl yoururl.com > yoururl.html

Till exempel:

# curl 74.125.68.100 >/tmp/google.html

Exemplet ovan sparar allt innehåll från värd 74.125.68.100 till /tmp/google.html .

3. Visa förfrågan och svarshuvud

Om du vill vara säker på att du får den förväntade förfrågan och svarshuvudet, använd följande kommando:

# curl -v yoururl.com

Till exempel:

# curl -v 74.125.68.100 * På väg att ansluta() till 74.125.68.100 port 80 (#0) * Försöker 74.125.68.100... * Ansluten till 74.125.68.100 (74.125.68.100) (74.125.68.100) (0) GET (0) port / HTTP/1.1 > User-Agent: curl/7.29.0 > Värd: 74.125.68.100 > Acceptera: */* >< HTTP/1.1 200 OK

4. Ladda ner i högsta hastighet

Om du behöver ta reda på hur lång tid det tar att ladda ner med en viss hastighet, använd följande kommando:

# curl --limit-rate 2000B

Till exempel:

# curl --limit-rate 2000B 74.125.68.100

5. Använda en proxy för att ansluta

Om du vill kontrollera om en proxyserver kan användas, använd följande syntax:

# curl --proxyyourproxy:port http://yoururl.com

6. Kontrollera webbadressen med introduktionen av titeln

För att åtgärda ett specifikt problem kan du använda Curl för att infoga dina data i rubriken. Tänk på följande begäranexempel med Content-Type:

# curl --header "Content-Type: application/json" http://yoururl.com

Vi ber curl att skicka innehållstypen som applikation/json till förfrågningshuvudet.

7. Lägg till en extra rubrik

Du kan lägga till en rubrik till en begäran med syntax-header.

# curl --header "X-CustomHeader: GeekFlare" http://yoururl.com

Till exempel:

# curl -v --header "X-CustomHeader: GeekFlare" 74.125.68 * På väg att ansluta() till 74.125.68.100 port 80 (#0) * Försöker 74.125.68.100... * Ansluten till 74.125.68.105. 68.100) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.29.0 > Värd: 74.125.68.100 > Acceptera: */* > X-CustomHeader: GeekFlare >< HTTP/1.1 200 OK

8. Öppna endast svarshuvudet

Om du snabbt vill kontrollera svarshuvudet kan du använda följande syntax för att göra det.

# curl --head http://yoururl.com

# curl -I 74.125.68.100 HTTP/1.1 200 OK Datum: Sön, 18 Jan 2015 08:31:22 GMT Upphör: -1 Cache-kontroll: privat, max-age=0 Innehållstyp: text/html; charset=ISO-8859-1 Set-Cookie: NID=67=SpnXKTDUhw7QGakIeLxmDSF; expires=mån, 20-jul-2015 08:31:22 GMT; sökväg=/; domän=.; HttpOnly P3P: CP="Detta är inte en P3P-policy! Se http://www.google.com/support/accounts/bin/answer.py?hl=sv&answer=151657 för mer information." Server: gws X-XSS-skydd: 1; mode=block X-Frame-Options: SAMEORIGIN Alternate-Protocol: 80:quic,p=0.02 Transfer-Encoding: chunked Acceptera-intervall: ingen Variera: Acceptera-Kodning #

9. Anslut HTTPS/SSLURL-adress och ignorera eventuella SSL-certifikatfel

Om du behöver komma åt en https-URL som ger ett certifikatfel på grund av ett värdnamn som inte matchar, kan du använda följande syntax.

curl --insäker https://dinurl.com

10. Anslut med ett specifikt protokoll (SSL/TLS)

För att ansluta till en URL med endast SSL V2/V3 eller TLS-protokoll, använd följande syntax.

Så här ansluter du med SSLV2:

# curl --sslv2 https://dinurl.com

Så här ansluter du med SSLV3:

# curl --sslv3 https://dinurl.com

Så här ansluter du via TLS:

# curl --tlsv1 https://dinurl.com

11. Ladda ner filen från FTP-servern

Med cURL kan du ladda ner en fil från en ftp-server genom att ange ett användarnamn och lösenord.

# curl -u användare:lösenord -O ftp://ftpurl/style.css

Du kan alltid använda "-v" med vilken syntax som helst för utförlig utdata.

Använda cURL online

Ja det är möjligt. Du kan köra cURL på distans med följande verktyg.
Online CURL är ett kompakt verktyg för att extrahera en webbadress och lägga till följande parametrar.

Connect-timeout --cookie --data --header --head --location --max-time --proxy --request --user --url --user-agent

Exempelutgång:


cURL kommandoradsbyggare - låter dig skapa ett cURL-kommando som kan användas för att mata in information i användargränssnittet.