Björkbloggen

Göteborg

Hej, kungen Sofie här, Daniel tycker det är tråkigt att blogga, så nu gör jag det.. tjatja Bloggen, vi är i Göteborg och nu ska vi ut o göra stan!!

Klockan 11:15
Comments (View)

Basic Auth med urllib2 (Python)

urllib2 är en modul i Python som kan agera HTTP-klient. Det är ett förenklat lager ovanför http.client modulen. Häromdagen byggde jag ett skript som laddade upp filer till vårat PHP-api på Virteco, och kommunicerade med detta genom HTTP och urllib2, med blandat resultat och några gråa hår :).

Att skapa en HTTP-förfrågan är väldigt enkelt med urllib2, dock är det skralt dokumenterat på http://docs.python.org/, men mer exempelbaserad dokumentation finns på annat håll. Men när jag bifogade inloggningsuppgifter genom urllib2.HTTPBasicAuthHandler gick det inte lika bra. Inloggningsuppgifterna bifogades aldrig i förfrågan, trots att jag dubbelkollat både med officiella dokumentation och diverse tredje parter. Efter lite sökande fann jag att urllib2 har en liten egenhet :).

När du använder urllib2.HTTPBasicAuthHandler skickas först en förfrågan utan Basic Auth-uppgifter. Endast om denna förfrågan skickar tillbaka en statuskod 401 tillsammans med en hint om inloggningsmetoden som en header, i mitt fall WWW-Authenticate: Basic realm=”“, görs en ny föfrågan där inloggningsuppgifterna följer med.

Felet jag gjorde var att jag helt enkelt inte följde HTTP-standarden för Basic Auth, genom att inte hinta korrekt om möjligheterna. Men jag ställer mig ändå frågande till hur urllib2 fungerar; jag har ju trots allt berättat för den att använda en viss inloggningsmetod, för jag vet att det kommer krävas. I det fallet känns det som väldigt onödig delay med 2 kall, speciellt som i mitt fall, när jag skickar med bilder som kan vara upp till 5mb.

Eftersom Basic Auth, som namnet antyder, är ganska enkelt, löste jag det hela genom att strunta i urllib2.HTTPBasicAuthHandler och bygga headern själv:

credentials = base64.encodestring(“xxx:xxx”).replace(“\n”, “”)

auth_header = “Basic %s” % credentials

headers = {“Accept”: “application/json”, “Authorization”: auth_header}

Hoppas det här hjälper om någon annan stöter på liknande problem :)

Klockan 22:23
Comments (View)
Klockan 15:11
Comments (View)
Klockan 09:29
Comments (View)
Lera? Kan det här någonsin bli till ett vettigt bröd? :D

Lera? Kan det här någonsin bli till ett vettigt bröd? :D

Klockan 20:18
Comments (View)
Klockan 15:19
Comments (View)

Rails och TDD

En liten återkoppling till mitt förra inlägg:

Har läst om och experimenterat med Ruby on Rails 3 ett tag. I och med att jag även blivit intresserad av TDD verkar jag nu verkligen ha en anledning att ta upp Ruby (och Rails) på allvar; titta på det här exemplet ur rspec, ett Ruby bibliotek för Behaviour Driven Development (en utveckling av TDD).

Syntaxen är ju magisk, som en Peter hade sagt :)

Cucumber, ett annat BDD-bibliotek ser inte heller så pjåkigt ut.

Klockan 07:12
Comments (View)

TDD: Test Driven Development

Ska prova på att skriva ett tekniskt inlägg nu :) Alla ofrälsta kan nog helt hoppa över det här inlägget ;)

TDD är ett ämne inom programmering som jag är sugen på att ge mig in på. Kort och gott handlar det om att vända lite på arbetsprocessen genom att först skriva tester på hur jag förväntar mig att en beståndsdel (ex. funktion) i min kod ska fungera, skapa den mest naiva lösningen för att passera testet och sedan utöka testerna och därmed implementationen ett steg i taget.

På det viset ämnar man få en genomtänkt, men inte överdesignad implementation, som redan är testad för flera olika scenarion som annars skulle ha kunnat orsaka buggar.

Dessutom verkar det vara ett perfekt sätt att alltid ha en uppdaterad dokumentation på sin kod; genom att titta på testerna ser man hur koden kan och borde användas.

En kortfattad men innehållsrik artikel, på en annars itterful sida, som går igenom TDD för nybörjaren : http://www.developerspot.com/tutorials/php/test-driven-development/page1.html.

Klockan 21:08
Comments (View)
Klockan 11:28
Comments (View)
Måns-Melker kan vara det häftigaste namnet någonsin?
Klockan 18:51
Comments (View)
Shelfari: Book reviews on your book blog